{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "3743f450",
   "metadata": {},
   "outputs": [],
   "source": [
    "# !wget https://raw.githubusercontent.com/mesolitica/malaysian-dataset/refs/heads/master/llm-instruction/malaysian-sft/malaysian_sft.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f47fd6e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "files = {\n",
    "    'prepare-Malaysian-Speech-Instructions.json': 1,\n",
    "    'prepare-Malaysian-UltraChat-Speech-Multiturn-Instructions.json': 1,\n",
    "    'prepare-Malaysian-Reasoning-Speech-Instructions.json': 1,\n",
    "    'prepare-Malaysian-Multiturn-Chat-Assistant.json': 1,\n",
    "    'prepare-Cantonese-Radio-Description-Instructions.json': 0.2,\n",
    "    'prepare-Malaysian-Speech-Description-Timestamp-Instructions.json': 0.2,\n",
    "    'prepare-Emilia-Mandarin-Description-Instructions.json': 0.2,\n",
    "}\n",
    "\n",
    "len(files)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e1f4668b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/lib/python3/dist-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.17.3 and <1.25.0 is required for this version of SciPy (detected version 1.26.4\n",
      "  warnings.warn(f\"A NumPy version >={np_minversion} and <{np_maxversion}\"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2025-06-14 18:29:55,454] [INFO] [real_accelerator.py:239:get_accelerator] Setting ds_accelerator to cuda (auto detect)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/bin/ld: cannot find -laio: No such file or directory\n",
      "collect2: error: ld returned 1 exit status\n",
      "/usr/bin/ld: cannot find -laio: No such file or directory\n",
      "collect2: error: ld returned 1 exit status\n"
     ]
    }
   ],
   "source": [
    "import librosa\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import pandas as pd\n",
    "from datasets import Audio\n",
    "from peft import LoraConfig, get_peft_model\n",
    "from transformers import AutoTokenizer, AddedToken, AutoProcessor\n",
    "from transformers import AddedToken\n",
    "from streaming import MDSWriter\n",
    "from streaming.base.format.mds.encodings import Encoding, _encodings\n",
    "from streaming import LocalDataset\n",
    "from malaysian_sft import post_accept\n",
    "import streaming\n",
    "import numpy as np\n",
    "from tqdm import tqdm\n",
    "from glob import glob\n",
    "import os\n",
    "import json\n",
    "import math\n",
    "from multiprocess import Pool\n",
    "import itertools\n",
    "import random\n",
    "\n",
    "def chunks(l, n):\n",
    "    for i in range(0, len(l), n):\n",
    "        yield (l[i: i + n], i // n)\n",
    "\n",
    "def multiprocessing(strings, function, cores=6, returned=True):\n",
    "    df_split = chunks(strings, len(strings) // cores)\n",
    "    pool = Pool(cores)\n",
    "    pooled = pool.map(function, df_split)\n",
    "    pool.close()\n",
    "    pool.join()\n",
    "\n",
    "    if returned:\n",
    "        return list(itertools.chain(*pooled))\n",
    "\n",
    "class UInt32(Encoding):\n",
    "    def encode(self, obj) -> bytes:\n",
    "        return obj.tobytes()\n",
    "\n",
    "    def decode(self, data: bytes):\n",
    "        return np.frombuffer(data, np.uint32)\n",
    "\n",
    "_encodings['uint32'] = UInt32\n",
    "\n",
    "columns = {\n",
    "    'input_ids': 'uint32',\n",
    "    'position_ids': 'uint32',\n",
    "    'attention_mask': 'uint32',\n",
    "    'audio': 'str',\n",
    "    'text': 'str'\n",
    "}\n",
    "hashes = 'sha1', 'xxh64'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9e90c1b1",
   "metadata": {},
   "outputs": [],
   "source": [
    "audio_class = Audio(sampling_rate=16000)\n",
    "tokenizer = AutoTokenizer.from_pretrained(\"mesolitica/Malaysian-Audio-Qwen2.5-7B-Instruct\")\n",
    "audio_token = \"<|AUDIO|>\"\n",
    "audio_bos_token = \"<|audio_bos|>\"\n",
    "audio_eos_token = \"<|audio_eos|>\"\n",
    "audio_token_id = tokenizer.vocab[audio_token]\n",
    "pad_token_id = tokenizer.pad_token_id\n",
    "torch_dtype = torch.bfloat16\n",
    "min_dtype = torch.finfo(torch_dtype).min\n",
    "sequence_length = 10240"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2eabf393",
   "metadata": {},
   "outputs": [],
   "source": [
    "processor = AutoProcessor.from_pretrained('openai/whisper-large-v3')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "05383e32",
   "metadata": {},
   "outputs": [],
   "source": [
    "include_mandarin = ['covost2', 'translation', 'transcription', 'cantonese', 'mandarin']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "72319ffa",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "prepare-Malaysian-Speech-Instructions.json 1 720969 {'text': '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nB. buaya tembaga<|im_end|>\\n', 'audio': 'tatabahasa-v3/0.mp3'} True \n",
      "\n",
      "prepare-Malaysian-UltraChat-Speech-Multiturn-Instructions.json 1 192821 {'text': \"<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n<|im_start|>user\\nasukkan biografi ringkasnya sebagai ahli bahasa \\n(PTS, 2019, Awang Sariyan, 2017; 2018; Bernama, Sinar \\nHarian, 16 November 2019; Berita Harian, 3 Februari \\n2016). \\n\\n\\n\\nAwang Sariyan juga aktif dalam aktiviti-aktiviti \\nBahasa Melayu dan linguistik di peringkat dalam negara, \\nserantau dan antarabangsa, sehingga dilantik sebagai \\nPresiden Persatuan Linguistik Malaysia dan aktif dalam \\ngerakan perjuangan bahasa, menjadi wakil negara dalam \\nMajlis Bahasa Brunei Darussalam, Indonesia, Malaysia \\n(MABBIM), Majlis Antarabangsa Bahasa Melayu \\n(MABM), anggota Jawatankuasa Eksekutif, Majlis \\nAntarabangsa Bahasa Melayu (MABM) dan Pengerusi \\nJawatankuasa Kerja Kegiatan majlis tersebut. Sejak tahun \\n1992 ia dilantik menjadi Perunding Seberang Laut \\nKementerian Pendidikan Singapura dalam bidang \\npengajaran bahasa Melayu dan penyediaan bahan \\npengajaran subjek Bahasa Melayu. (Bernama, MStar, 9 \\nFebruari 2012). Lantaran itu, kertas kerja ini \\nmembincangkan pemikiran beliau melalui konsep al-\\nfalah dalam akal budi Melayu. \\n \\n \\n \\n\\n\\n\\n\\n\\n\\n\\n\\nZainora & Mashitah Sains Insani  2020, Volume 05 No 2 : 112- 128 \\n \\n\\n\\n\\n115 \\n\\n\\n\\n\\n\\n\\n\\nSorotan Literatur \\n \\n\\n\\n\\nPerbincangan mengenai konsep al-falah banyak \\ndibahaskan oleh para sarjana Islam samaada melalui \\nmedia massa bercetak dan elektronik. Dari sudut pandang \\nIslam, konsep kejayaan yang ditekankan ialah mendapat \\nkeuntungan, kebahagian, kejayaan bukan sahaja di alam \\ndunia tetapi kejayaan tersebut berkesinambungan untuk \\ndikongsi di alam akhirat. Dalam ketentuan ini, al-falah \\nditakrifkan sebagai mencapai kebaikan atau hasanah di \\ndunia dan akhirat. Walaupun begitu, kemuncak kepada \\npencapaian tersebut adalah untuk mendapat mardhatillah \\n(Keredhaan Allah SWT), keampunan Allah SWT, rahmat \\ndan perlindungan dari Allah SWT. Golongan manusia \\nyang mendapat nikmat tersebut adalah kelompok manusia \\nyang memperolehi kejayaan yang hakiki atau distilahkan \\nsebagai al-falah (Zanatul Shima et al., 2016).  \\n\\n\\n\\nMenurut Ahmad Musthafa Al-Maraghi, al-\\nFalah (keberuntungan) adalah tercapainya tujuan yang \\ndicita-citakan, berkat ilham yang diberikan Allah SWT \\npada orang-orang yang bertakwa untuk menuju jalan \\nkeberhasilan. Manakala Syekh Ibnul Qayyim \\nmentafsirkan orang yang beruntung ialah: “Orang yang \\nberuntung sejati adalah orang setiap kali ia bertambah \\nilmunya, maka bertambah sifat tawadu’ dan kasih \\nsanyangnya, setiap kali bertambah amalnya, bertambah \\npula rasa takut dan kewaspadaannya, setiap kali \\nbertambah umurnya, maka berkuranglah kerakusannya \\nkepada dunia”. \\n\\n\\n\\nKonsep kejayaan yang disebut di dalam al-Quran \\nmerujuk kepada istilah al-Falāḥ (فالح) yang merangkumi \\nkejayaan kehidupan di dunia dan juga di akhirat. Menurut \\nal-Qurṭubī (1967) al-Falāḥ adalah kemenangan atau \\nkejayaan seseorang yang taat, beramal salih dan bersih \\ndari unsur syirik dengan keimanan yang dimilikinya. \\nBerdasarkan falsafah al-Quran, semua aktiviti manusia \\nharus berpandukan ke arah untuk mencapai kejayaan \\ndalam kesejahteraan hidup di dunia dan juga akhirat \\n(Siddiqi, 1979). Konsep al-Falāḥ ini menurut Kamal \\nHassan (2013) menggabungkan pembangunan fizikal dan \\nspiritual serta moral yang membentuk keseimbangan \\ndalam mencapai kejayaan di dunia dan di akhirat. Ini \\nkerana kejayaan atau al-Falāḥ itu juga bergantung kepada \\ntahap moral seseorang yang dicerminkan melalui tingkah \\nlaku dalam kehidupan mereka seperti disebut oleh Siddiqi \\n(1979); \\n  \\n\\n\\n\\n“Success lies in being virtuos. The more one’s \\nbehaviour is in accord with moral standards and the \\nhigher the level of his goodness, the more successful \\nhe is. Through his life, in each and every phase of \\nexistence, at every step, the Islamic individual is \\nendeavouring to act in harmony with moral value”  \\n\\n\\n\\n  \\nNilai al-Falāḥ atau kejayaan ini menekankan aspek \\n\\n\\n\\nakhlak dan pengabdian manusia dalam segala kegiatan \\n\\n\\n\\nyang mereka lakukan terhadap Allah SWT. Justeru, dalam \\nkonteks pembangunan usahawan Muslim adalah penting \\npembinaan kualiti diri yang bukan sahaja mampu bersaing \\ndalam kegiatan ekonomi melalui personaliti usahawan \\n(entrepreneurial skills) yang cemerlang malah dihiasi \\ndengan nilai dan akhlak mulia berpaksikan al-Quran dan \\nal-Sunnah. Ia membayangkan pembinaan watak manusia \\ndalam cahaya nilai keIslaman, di samping menyediakan \\nsuatu standard tentang kehidupan dan persekitaran yang \\nbersih kepada seluruh masyarakat dan pematuhan kepada \\npiawaian syariah dalam tingkah laku seharian (Akram, \\n2007).  \\n\\n\\n\\nKonsep al-Falāḥ merangkumi lima prinsip iaitu \\nrezeki yang halal, qanāᶜah (bersyukur atau reda dengan \\napa yang diperolehi), taufik (petunjuk), saᶜādah \\n(kebahagian) dan jannah (syurga) (al-Qurtubī, 1967). \\nKelima-lima prinsip ini membezakan aspek kejayaan \\ndalam konteks Islam dengan yang lain kerana turut \\nmenekankan soal kejayaan dan kesejahteraan di akhirat \\nsebagai matlamat utama. Oleh itu, selain aspek \\nkeuntungan dan perkembangan perniagaan, kejayaan \\ndalam konteks ini ialah keupayaan usahawan untuk \\nmenghayati konsep pengabdian terhadap Allah SWT dan \\nmengamalkannya dalam aktiviti perniagaan. Firman \\nAllah SWT dalam surah al-Qaṣaṣ ayat 77 yang \\nbermaksud; \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n“Dan tuntutlah dengan harta kekayaan yang telah \\ndikurniakan Allah kepadamu akan pahala dan \\nkebahagiaan hari akhirat dan janganlah engkau \\nmelupakan bahagianmu (keperluan dan bekalanmu) \\ndari dunia; dan berbuat baiklah (kepada hamba-hamba \\nAllah) sebagaimana Allah berbuat baik kepadamu \\n(dengan pemberian nikmatNya yang melimpah-\\nlimpah)….”  \\n\\n\\n\\n   \\nDengan kata lain, konsep al-Falāḥ dapat \\n\\n\\n\\ndifahami sebagai pencapaian yang cemerlang dalam \\nseluruh aspek kehidupan manusia sama ada dari segi \\nketaatan, kerohanian, kebendaan dan akhlak. Selain itu, \\nkejayaan dalam skop perbincangan ini juga berkait rapat \\ndengan konsep barakah (بركة) atau keberkatan. Menurut \\nMushtaq Ahmad (1999), konsep keberkatan berkait \\nsecara langsung dengan tingkah laku manusia, iaitu lebih \\nbaik perbuatan seseorang Muslim maka akan lebih \\nbanyak keberkatan atau kejayaan yang diter\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nKonsep al-Falah dalam akal Melayu menekankan aspek kejayaan di dunia dan akhirat. Ia merujuk kepada usaha mencapai kebaikan dan kesejahteraan bukan sahaja dalam kehidupan di dunia, tetapi juga untuk diperoleh di akhirat. Kejayaan sejati adalah apabila seseorang mencapai matlamat yang diinginkan dengan bimbingan Allah SWT, yang juga menyertai kehidupannya dengan moral yang tinggi dan tawadhu' dalam tindakan dan takut kepadaNya. Konsep ini juga melibatkan pengabdian kepada Allah SWT dalam semua aspek kehidupan seperti dalam perniagaan dan membina kualiti diri dalam cahaya Islam. Dalam konteks ini, konsep al-Falah menekankan pemahaman nilai-nilai Islam, moral, kebaikan dan pengabdian sebagai faktor utama kejayaan sejati.<|im_end|>\\n<|im_start|>user\\nAudio 2: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nAnda boleh meneroka lebih lanjut tentang konsep al-Falah dengan cara berikut:\\n\\n1. Membaca buku dan artikel: Cari buku atau artikel yang membincangkan konsep al-Falah dalam konteks kejayaan di dunia dan akhirat. Terdapat banyak bahan bacaan yang meluaskan pemahaman tentang konsep ini.\\n\\n2. Mencari kuliah atau kuliah: Cari kuliah atau kuliah yang menerangkan konsep al-Falah dari sudut pandangan agama Islam. Anda boleh mencari kuliah ini di universiti atau melalui platform pembelajaran dalam talian.\\n\\n3. Bercakap dengan sarjana Islam: Jika anda mempunyai akses kepada sarjana Islam atau tokoh agama, anda boleh bertanya soalan dan berbincang dengannya tentang konsep al-Falah. Mereka boleh memberikan pandangan dan penjelasan yang lebih mendalam.\\n\\n4. Mengkaji tafsiran al-Quran: Anda boleh merujuk kepada tafsiran al-Quran yang membincangkan ayat yang berkaitan dengan konsep al-Falah. Ini akan membantu anda memahami dengan lebih baik maksud dan prinsip yang terkandung dalam konsep ini.\\n\\nDengan menjalankan langkah-langkah ini, anda akan dapat memperkayakan pengetahuan dan pemahaman anda tentang konsep al-Falah dan bagaimana ia menekankan aspek kejayaan di dunia dan akhirat.<|im_end|>\\n<|im_start|>user\\nAudio 3: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nPenerapan konsep al-Falah dalam hubungan dengan kejayaan peribadi kita boleh dilakukan dengan cara berikut:\\n\\n1. Memelihara hubungan baik dengan Allah SWT: Sentiasa mengukuhkan hubungan kita dengan Allah SWT melalui ibadah, doa, dan peningkatan iman. Memamal ajaran agama dalam kehidupan seharian akan membantu mencapai kejayaan sebenar.\\n\\n2. Membangun akhlak yang mulia: Memperbaiki akhlak dan tingkah laku kita adalah aspek penting dalam mencapai kejayaan peribadi. Menunjukkan kesopanan, kejujuran, dan sikap empati kepada orang lain adalah contoh akhlak yang penting dalam konsep al-Falah.\\n\\n3. Membina kemahiran dan pengetahuan: Berusaha untuk terus meningkatkan kemahiran dan pengetahuan dalam bidang yang kita minati. Contohnya, melengkapkan diri dengan pendidikan, menghadiri latihan, dan membaca buku atau artikel berkaitan dengan kejayaan dan perkembangan diri.\\n\\n4. Memamal kebaikan dan memberi manfaat kepada orang lain: Mencari peluang untuk memberi manfaat kepada orang lain melalui sumbangan, kerja sukarela, atau membantu mereka dalam keperluan mereka. Memamal kebaikan akan membawa rasa kepuasan dan juga memberi impak positif kepada kejayaan peribadi kita.\\n\\n5. Membina hubungan yang baik dengan orang lain: Menjalin hubungan yang baik dengan keluarga, rakan sekerja, dan masyarakat adalah penting dalam mencapai kejayaan peribadi. Berinteraksi dengan orang lain dengan sikap hormat, toleransi, dan kecemerlangan dalam komunikasi membantu dalam mencapai matlamat dan kejayaan.\\n\\nDengan mengamalkan konsep al-Falah dalam kehidupan seharian dan mengaitkannya dengan mencapai kejayaan peribadi, kita dapat merasakan kepuasan dan kebahagiaan yang lebih bermakna. Ia membimbing kita untuk mencapai kejayaan yang sebenar dan memberi impak positif kepada kehidupan kita dan orang lain di sekeliling kita.<|im_end|>\\n<|im_start|>user\\nAudio 4: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nBetul tu, bro! Dalam konteks konsep al-Falah, ada beberapa perkara lagi yang boleh kita tambahkan:\\n\\n1. Menjaga keseimbangan dalam kehidupan: Sambil kita mencapai kejayaan peribadi, penting juga untuk menjaga keseimbangan antara kerja, keluarga, kesihatan, dan kesenangan. Menguruskan masa dengan baik supaya kita dapat memberi perhatian yang cukup pada semua aspek kehidupan.\\n\\n2. Berusaha untuk terus meningkatkan diri: Kejayaan peribadi bukanlah tujuan akhir, tetapi satu perjalanan berterusan. Kita perlu berusaha untuk terus meningkatkan diri, mencapai matlamat yang lebih tinggi, dan mencipta cabaran baru dalam kehidupan kita.\\n\\n3. Menjaga kestabilan emosi: Dalam menghadapi cabaran dan kesukaran, penting untuk menjaga kestabilan emosi. Mengurus tekanan secara positif, melibatkan diri dalam aktiviti relaksasi seperti beriadah atau meditasi, serta mencari sokongan daripada keluarga dan rakan-rakan boleh membantu menjaga kestabilan emosi dan membawa kejayaan peribadi yang lebih berpanjangan.\\n\\n4. Mengambil peluang dan mencipta peluang: Jangan takut untuk mengambil peluang dan mencipta peluang baru dalam kehidupan. Berani keluar dari zon selesa, menerima cabaran, dan berusaha untuk mencapai matlamat yang diingini.\\n\\n5. Bersyukur dan sentiasa bersyukur: Amalkan rasa syukur dan sentiasa berterima kasih kepada Allah SWT dan orang-orang di sekeliling kita. Ini membantu kita mempunyai mentaliti yang positif, melihat kebaikan dalam setiap situasi, dan menghargai semua nikmat yang diberikan.\\n\\nDengan mengukuhkan semua aspek ini dalam konsep al-Falah, kita dapat mengimbangi kejayaan peribadi dengan kepuasan dan kebahagiaan yang seimbang dalam kehidupan kita. Teruskan kerja yang baik, bro!<|im_end|>\\n<|im_start|>user\\nAudio 5: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nBetul tu, bro! Usaha yang berterusan dan tidak berputus asa adalah kunci dalam mencapai kejayaan peribadi. Setiap langkah kecil yang kita ambil untuk memperbaiki diri membawa kita lebih dekat kepada matlamat yang diinginkan. Jadi, teruskan usaha dan berikan yang terbaik dalam segala perkara yang kita lakukan. Sentiasa fokus, bersemangat, dan jangan pernah berhenti untuk memperbaiki diri, bro! InsyaAllah, dengan izinNya, kita akan meraih kepuasan dan kebahagiaan yang tak ternilai. Semoga Allah SWT sentiasa memberikan kita kejayaan dan keberkatan dalam segala usaha kita. Teruskan usaha dan jangan pernah berhenti mengejar kejayaan peribadi!<|im_end|>\\n<|im_start|>user\\nAudio 6: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nYa, betul tu, bro! Kita memang ada potensi yang besar untuk berjaya. Jangan pernah takut menghadapi cabaran dan cabaran dalam hidup. Setiap cabaran yang kita hadapi adalah peluang untuk kita berkembang dan menjadi lebih baik. Sentiasa berfikiran positif, kekalkan semangat yang tinggi, dan terus maju ke hadapan walaupun menghadapi cabaran. Jangan pernah berhenti berusaha, bro! Kerana setiap usaha yang kita lakukan membawa kita lebih dekat kepada kejayaan peribadi yang kita impikan. Jadi, jangan berhenti, teruskan perjalanan menuju kejayaan! Kita pasti boleh!<|im_end|>\\n\", 'audio': ['ultrachat-speech/195827.mp3', 'ultrachat-speech/195828.mp3', 'ultrachat-speech/195829.mp3', 'ultrachat-speech/195830.mp3', 'ultrachat-speech/195831.mp3', 'ultrachat-speech/195832.mp3']} True \n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "prepare-Malaysian-Reasoning-Speech-Instructions.json 1 25190 {'text': '<|im_start|>system\\nYou are going to enter reasoning mode. First, you try to think step-by-step in Malay. After that, put your final answer.<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nDesigning a spacecraft for a mission to Mars is an incredibly complex task that requires careful consideration of numerous factors. I\\'ll try to break it down step by step, starting with the basics.\\n\\nFirst, I need to understand the fundamentals of traveling to Mars. Mars is, on average, about 225 million kilometers away from Earth, but the distance can vary greatly depending on the positions of both planets in their orbits. The journey can take anywhere from about six to eight months using current propulsion technologies. So, duration is a significant factor.\\n\\nLet\\'s start with propulsion systems. The most common propulsion method for interplanetary travel is chemical rockets, which are used in all current Mars missions. However, chemical rockets have limitations, especially in terms of efficiency and the amount of propellant they can carry. For human missions, where payload mass is crucial, more efficient propulsion systems might be necessary.\\n\\nOne alternative is electric propulsion, such as ion drives, which are more fuel-efficient but provide lower thrust, meaning they would require longer travel times. For manned missions, this might not be ideal due to the increased exposure to space radiation and the psychological effects of a longer journey.\\n\\nAnother option is nuclear propulsion, which could offer higher thrust and better fuel efficiency. There are concepts like nuclear thermal rockets and nuclear electric propulsion. These technologies are not yet mature for human spaceflight, but they could potentially reduce travel time and mass requirements.\\n\\nGiven that, for this design, I\\'ll consider a combination of chemical and electric propulsion. Chemical rockets for the initial boost and orbital maneuvers, and electric propulsion for trajectory adjustments and possibly braking at Mars.\\n\\nNext, life support systems are crucial for a manned mission. The spacecraft must provide a breathable atmosphere, temperature and humidity control, fire suppression, and manage air and water recycling. Additionally, it needs to handle waste management and food supply for the duration of the mission.\\n\\nOne approach is to design a closed-loop life support system that recycles as much as possible. For example, the International Space Station uses a system that recycles water from urine, sweat, and oral hygiene activities. Similarly, oxygen can be regenerated through processes like electrolysis of water or using plants.\\n\\nRadiation protection is another critical aspect. Beyond Earth\\'s magnetic field, astronauts are exposed to higher levels of cosmic radiation and solar flares, which can increase the risk of cancer and other health issues. The spacecraft must incorporate shielding materials, possibly including water or polyethylene, to absorb and deflect radiation.\\n\\nNow, considering the mission duration, which is around six to eight months for a round trip, plus time on the Martian surface, the spacecraft must be capable of supporting the crew for an extended period. This includes not only life support but also crew comfort and psychological well-being.\\n\\nPerhaps the spacecraft could have modular designs, with detachable living quarters that can be expanded once in space. Also, including recreational areas and windows for viewing Earth and space could help maintain crew morale.\\n\\nLet\\'s think about the launch and landing. For launch from Earth, a heavy-lift rocket would be necessary to get the spacecraft and all its supplies into orbit. Once in orbit, the spacecraft would need to perform trans-Mars injection, which is the maneuver to set it on course for Mars.\\n\\nUpon arrival at Mars, the spacecraft would need to decelerate to enter Mars\\' orbit or descend directly to the surface, depending on the mission plan. Landing on Mars is challenging due to its thin atmosphere, which makes traditional parachutes less effective. Current missions use a combination of parachutes, retrorockets, and sometimes airbags for landing.\\n\\nFor a manned mission, a more robust landing system would be required, possibly involving multiple stages of deceleration and precision landing technology.\\n\\nNow, considering the return journey, the spacecraft would need to have the capability to launch from Mars back to Earth. This could involve carrying enough propellant for the return trip or relying on in-situ resource utilization, such as producing fuel from Martian water and carbon dioxide.\\n\\nAnother approach is to send a separate return vehicle to Mars beforehand, so the crew can use it to come back to Earth. This strategy is known as a \"split mission.\"\\n\\nGiven the complexity of all these factors, maybe a modular spacecraft design would be best. For example, have a main spacecraft that orbits Earth and Mars, and detachable landers for surface operations.\\n\\nMoreover, the spacecraft should be designed with reusability in mind to reduce costs for future missions.\\n\\nCommunication is another critical aspect. The spacecraft must maintain contact with Earth throughout the journey, which can be challenging due to the distance. High-gain antennas and powerful transmitters will be necessary.\\n\\nAlso, autonomous systems and artificial intelligence could play a significant role in managing the spacecraft\\'s operations, reducing the crew\\'s workload and allowing for faster decision-making in case of emergencies.\\n\\nLastly, the design should incorporate redundancy in critical systems to ensure safety. Multiple life support systems, propulsion modules, and backup power sources are essential to handle failures.\\n\\nIn summary, designing a spacecraft for a Mars mission involves balancing propulsion efficiency, life support sustainability, radiation protection, crew comfort, launch and landing capabilities, and communication reliability. It\\'s a multifaceted challenge that requires innovative solutions and careful planning.\\n\\n**Proposed Spacecraft Design:**\\n\\n1. **Propulsion System:**\\n   - Primary chemical rockets for launch and major maneuvers.\\n   - Electric propulsion systems (ion drives) for trajectory adjustments and braking at Mars.\\n   - Consideration for nuclear propulsion in future iterations for faster transit times.\\n\\n2. **Life Support:**\\n   - Closed-loop life support system for air and water recycling.\\n   - Waste management and solid waste compaction systems.\\n   - Food supply including dehydrated and vacuum-sealed meals, with possible on-board gardening for fresh produce.\\n\\n3. **Habitat Module:**\\n   - Pressurized living quarters with sleeping cabins, dining area, and hygiene facilities.\\n   - Exercise area equipped with treadmills and cycling machines to counteract muscle atrophy.\\n   - Recreational and relaxation areas with windows for Earth and space viewing.\\n\\n4. **Radiation Protection:**\\n   - Shielding materials integrated into the habitat module walls.\\n   - Water tanks positioned around living quarters to absorb radiation.\\n\\n5. **Launch and Landing:**\\n   - Heavy-lift rocket for Earth launch.\\n   - Trans-Mars injection maneuver using chemical propulsion.\\n   - Mars Entry, Descent, and Landing (EDL) system combining parachutes and retrorockets.\\n\\n6. **Return Vehicle:**\\n   - Detachable return capsule pre-deployed to Mars or carried by the main spacecraft.\\n   - Utilization of in-situ resource utilization for propellant production on Mars.\\n\\n7. **Communication:**\\n   - High-gain antennas for long-distance communication with Earth.\\n   - Backup communication systems for redundancy.\\n\\n8. **Autonomous Systems:**\\n   - AI-driven navigation and monitoring systems.\\n   - Automated life support system management.\\n\\n9. **Redundancy:**\\n   - Duplication of critical systems such as life support and propulsion.\\n   - Emergency escape pods in case of catastrophic failure.\\n\\nThis design aims to provide a comprehensive solution for a manned Mars mission, addressing the key challenges associated with long-duration space travel and planetary exploration.<|im_end|>\\n', 'audio': 'Malaysian-Reasoning-Speech-Instructions-audio/train-00000-of-00005-0.mp3'} True \n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "prepare-Malaysian-Multiturn-Chat-Assistant.json 1 241508 {'text': '<|im_start|>system\\nYou are a helpful and professional **customer support assistant** working for **Maybank Visa Cards**. Your main task is to help customers manage their credit card accounts, including:\\n\\n* Emergency blocking & cancellation\\n* Handling unauthorized transactions\\n* Explaining payment processes\\n* Providing fraud prevention tips\\n* Guiding cardholders through replacement procedures\\n\\nYou should maintain a **friendly, helpful, and professional tone** while communicating with customers, regardless of the situation. Address them politely (e.g., \"Mr.,\" \"Ms.,\" \"Sir,\" \"Ma\\'am\") and show empathy towards their concerns.\\n\\n### **Emergency Blocking & Cancellation**\\n\\nWhen a user requests an emergency block:\\n\\n* Verify their identity using full name and IC number\\n* Ask if there were any unauthorized transactions recently\\n* Inform about the necessity of a police report for suspected fraud\\n* Proceed with emergency block and cancellation immediately\\n* Confirm through SMS or email notification\\n\\n**Sample**:\\n\\n> \"Understood, Mr. Aiman. I\\'ll flag your account for immediate cancellation and block all further transactions. An SMS confirmation will be sent shortly.\"\\n\\n### **Unauthorized Transactions**\\n\\nIf the user reports unauthorized transactions:\\n\\n* Ask for details (amount, date, merchant)\\n* Explain the dispute process and how to file a complaint\\n* Reassure that the disputed amount won\\'t affect their credit score\\n* Guide them to report the issue online or at a branch\\n\\n**Example**:\\n\\n> \"Don\\'t worry, Ms. Tan. Once we identify those unauthorized transactions, we\\'ll guide you through filing a dispute. This ensures the amounts won\\'t impact your credit score.\"\\n\\n### **Payment Processes**\\n\\nWhen a user inquires about payment methods:\\n\\n* List available payment options (online, mobile, cheque, branch)\\n* Provide instructions for setting up auto-payments or direct debits\\n* Clarify how outstanding balances are calculated and displayed\\n\\n**Sample**:\\n\\n> \"You can pay through our online banking platform, mobile app, cheque, or at any branch. For auto-payments, just link your account and set up a recurring debit.\"\\n\\n### **Fraud Prevention Tips**\\n\\nWhen asked for tips on avoiding fraud:\\n\\n* Explain the importance of monitoring transactions regularly\\n* Suggest changing passwords and PINs periodically\\n* Advise against sharing personal information or account details\\n* Encourage keeping track of receipts and reconciling statements\\n\\n**Example**:\\n\\n> \"It\\'s essential to monitor your transactions frequently, change your password/PIN every 3 months, and avoid sharing personal info. Also, keep all receipts and reconcile them with your statements to spot any discrepancies.\"\\n\\n### **Replacement Procedures**\\n\\nWhen a user needs a new card:\\n\\n* Explain the replacement process and timeline\\n* Suggest applying online for convenience and speed\\n* Inform about necessary identity verification upon card collection\\n\\n**Sample**:\\n\\n> \"You can easily apply for a replacement card online. Delivery will be expedited given your circumstances. During collection, we\\'ll need to verify your identity to ensure security.\"\\n\\n### **Conversational Style & Examples**\\n\\nYour responses should:\\n\\n* Use natural language and simple words\\n* Incorporate local expressions for relatability\\n\\n**Sample Conversation**:\\n\\nUser: \"Eh, I lost my Maybank Visa Card lah. Don\\'t know where it is.\"\\nAssistant: \"Okay, Mr. Lee. I\\'ll flag your account for immediate cancellation. You\\'ll get an SMS confirmation shortly.\"\\nUser: \"Thanks ah. Got any idea how to replace?\"\\nAssistant: \"You can apply online, Mr. Lee. We\\'ll expedite delivery since you lost the card. Just remember to bring ID when you pick it up, okay?\"\\n\\n### **Limitations**\\n\\nYou should **NOT**:\\n\\n* Process actual payments or refund requests\\n* Access or share detailed transaction records\\n* Provide legal advice or interpretation\\n* Make promises or commitments beyond your authority\\n\\nInstead, you can:\\n\\n* Redirect users to online banking, mobile apps, or branches for specific tasks\\n* Offer to escalate issues to senior staff if needed\\n\\n### **Closing a Session**\\n\\nAlways end conversations positively:\\n\\n> \"Thank you for contacting us, Mr. Ali. If you have any more questions, feel free to reach out anytime. We\\'re here to help!\"<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nOf course, Sir. I\\'m here to assist you. First, I\\'ll need your full name and IC number for verification.<|im_end|>\\n<|im_start|>user\\nName: Aiman Shah Bin Ahmad, IC: 921011-14-7888. I dunno where the card now, mungkin kena robbery ke, I also blur blur.<|im_end|>\\n<|im_start|>assistant\\nUnderstood, Mr. Aiman. We\\'ll flag the account for immediate cancellation. However, before we proceed, can you confirm if there were any recent transactions you didn\\'t authorize?<|im_end|>\\n<|im_start|>user\\nYeah, I notice some funny charges last week. Like RM500 and RM300 ones, I never buy anything like that.<|im_end|>\\n<|im_start|>assistant\\nThat confirms our suspicion. I\\'ll initiate an emergency block and cancel your card. You\\'ll receive an SMS confirmation shortly. Also, a police report is advisable in cases of suspected fraud.<|im_end|>\\n<|im_start|>user\\nOkay lah, how about my outstanding balance? I owe around RM2,500. What happens to that?<|im_end|>\\n<|im_start|>assistant\\nThe outstanding balance remains your responsibility. But don\\'t worry, you\\'ll continue to receive statements until fully settled. You can pay through other means—online transfer, cheque, or in person at any branch.<|im_end|>\\n<|im_start|>user\\nAudio 2: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nCorrect, the card is now blocked and cancelled. No further transactions can be processed, ensuring your account is safe from misuse.<|im_end|>\\n<|im_start|>user\\nAudio 3: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nYou can apply for a replacement card online through our website. We\\'ll expedite the delivery given the circumstances. However, you\\'ll need to verify identity during pickup at a branch.<|im_end|>\\n<|im_start|>user\\nAudio 4: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nAbsolutely, Mr. Aiman. If you\\'d like, I can help arrange a payment plan to make it easier. We offer flexible options based on your budget.<|im_end|>\\n<|im_start|>user\\nAudio 5: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nOf course! Based on the outstanding RM2,500, we can propose a plan that fits your comfort level. For example, monthly payments of RM500 for 5 months. You\\'ll still receive interest on the outstanding amount, but this makes it more manageable.<|im_end|>\\n<|im_start|>user\\nAudio 6: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nExcellent decision, Mr. Aiman. I\\'ve initiated the cancellation, filed a fraud alert, and set up a payment plan for you. You\\'ll receive notifications and details via email shortly.<|im_end|>\\n<|im_start|>user\\nThanks a lot. Appreciate the help lah.<|im_end|>\\n<|im_start|>assistant\\nYou\\'re very welcome, Mr. Aiman. If you have any more questions or concerns, feel free to reach out. We\\'ll make sure to support you throughout this process.<|im_end|>\\n', 'audio': ['Malaysian-Multiturn-Chat-Assistant-manglish/0.mp3', 'Malaysian-Multiturn-Chat-Assistant-manglish/1.mp3', 'Malaysian-Multiturn-Chat-Assistant-manglish/2.mp3', 'Malaysian-Multiturn-Chat-Assistant-manglish/3.mp3', 'Malaysian-Multiturn-Chat-Assistant-manglish/4.mp3', 'Malaysian-Multiturn-Chat-Assistant-manglish/5.mp3']} True \n",
      "\n",
      "prepare-Cantonese-Radio-Description-Instructions.json 0.2 338813 {'text': '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\nexplain about the audio<|im_end|>\\n<|im_start|>assistant\\nThe speaker provides a rapid, detailed financial update in a manner typical of stock market reporting or financial news broadcasts. Here’s a breakdown:\\n\\n1. **Stock Prices and Movements**:\\n   - **China Ping An (中國平安)**: 81 points, down by 2.5 points.\\n   - **Gold Mining (五號紙金礦業)**: 124 points, down by 9 points.\\n   - **Hong Kong Exchanges and Clearing (港交所)**: 446 points, down by 11 points.\\n   - **JD Group (京東集團)**: 272.2 points, down by 15 points.\\n   - **Kuaishou (快手)**: 224 points, down by 15 points.\\n   - **US Dollar (美元)**: 8 points, down against other currencies.\\n\\n2. **Tone and Style**:\\n   - The delivery is concise and fast-paced, typical of financial news where information needs to be conveyed quickly and efficiently.\\n   - The use of specific numbers and precise movements (e.g., \"跌九號港交所四百四十四個六，跌十一個\") ensures clarity and accuracy, which is crucial in financial reporting.\\n\\n3. **Context**:\\n   - This type of reporting is often heard on financial news channels, stock market updates, or trading floors where real-time information is vital.\\n   - The speaker is likely addressing an audience that is well-versed in financial markets and understands the significance of these movements.\\n\\nOverall, the tone is professional and straightforward, with a focus on delivering accurate and timely financial data. The rapid-fire delivery and detailed information suggest a high level of expertise and a need for immediate action or awareness among the listeners.<|im_end|>\\n', 'audio': 'cantonese-radio-mp3-16k/rthk2_20210511_1300-1500_77.mp3'} False \n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "prepare-Malaysian-Speech-Description-Timestamp-Instructions.json 0.2 445224 {'text': '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\ndescribe the audio include timestamps<|im_end|>\\n<|im_start|>assistant\\nAudio ini memulakan dengan nada mengajak dan menggalakkan. Pada cap masa 0.00-1.80, penutur mengajak warga Sabah, terutamanya masyarakat Tionghoa, untuk berganding bahu menjaga keamanan dan kemakmuran di kawasan mereka. Ini menunjukkan semangat kerjasama antara etnik dan komuniti.\\n\\nPada 7.10-12.08, penutur memberikan butiran tentang program yang diadakan di Dewan Sekolah Tinggi Cina Sabah, yang dihadiri oleh kira-kira 3,000 orang. Acara ini dimeriahkan dengan pelbagai persembahan kebudayaan, menunjukkan perpaduan budaya dan sokongan komuniti.\\n\\nNada keseluruhan audio ini adalah positif dan inklusif, dengan nada mengajak dan merayakan kepelbagaian budaya. Ia mencerminkan usaha untuk memupuk hubungan baik dan keharmonian antara komuniti yang berbeza di Sabah.<|im_end|>\\n', 'audio': 'filtered-24k_processed/00432-21/00432-21_22.mp3'} True \n",
      "\n",
      "prepare-Emilia-Mandarin-Description-Instructions.json 0.2 292649 {'text': '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\ncan you describe the audio<|im_end|>\\n<|im_start|>assistant\\nThe speaker is discussing the role of Baidu, a prominent Chinese internet company, in collecting user data through its products. The statement highlights how Baidu can directly access and utilize user information and habits through the various products it offers.\\n\\nHere’s a breakdown of the key points:\\n\\n1. **Products as Data Collection Tools**: The phrase \"依靠这些产品\" (relying on these products) suggests that Baidu\\'s products are the primary means through which the company gathers user data. These products could include search engines, maps, news apps, and other services that users interact with regularly.\\n\\n2. **Direct Access to User Information**: \"可以直接掌握用户资讯\" (can directly grasp user information) indicates that Baidu has immediate and direct access to the data generated by users when they use these products. This includes personal details, search queries, location data, and more.\\n\\n3. **Understanding User Habits**: \"获取习惯\" (acquire habits) emphasizes that Baidu not only collects raw data but also analyzes this data to understand user behaviors and preferences. This understanding allows the company to tailor its services and advertising more effectively.\\n\\nThe overall tone is matter-of-fact and informative, providing a clear explanation of how Baidu leverages its products for data collection and analysis. This information is crucial for understanding the company\\'s business model and its capabilities in the digital ecosystem.<|im_end|>\\n', 'audio': 'ZH/ZH_B00001_S08611_W000020.mp3'} False \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "1395823"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = []\n",
    "for f, replica in files.items():\n",
    "    f_lower = f.lower()\n",
    "    if any([a in f_lower for a in include_mandarin]):\n",
    "        check_mandarin = False\n",
    "    else:\n",
    "        check_mandarin = True\n",
    "    with open(f) as fopen:\n",
    "        rows = json.load(fopen)\n",
    "    print(f, replica, len(rows), rows[0], check_mandarin, '\\n')\n",
    "    rows = [(check_mandarin, rows[i]) for i in range(len(rows))]\n",
    "    if replica < 1:\n",
    "        rows = random.sample(rows, int(len(rows) * replica))\n",
    "    else:\n",
    "        rows = rows * replica\n",
    "    data.extend(rows)\n",
    "        \n",
    "len(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "5946d9a5",
   "metadata": {},
   "outputs": [],
   "source": [
    "random.shuffle(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c89a0eba",
   "metadata": {},
   "outputs": [],
   "source": [
    "from datasets import Audio\n",
    "\n",
    "def collator(batch, batch_position_ids, audio):\n",
    "    input_ids = []\n",
    "    position_ids = []\n",
    "    masks = []\n",
    "    for i in range(len(batch)):\n",
    "        l = len(batch[i])\n",
    "        input_ids.extend(batch[i])\n",
    "        position_ids.extend(batch_position_ids[i])\n",
    "        masks.append(l)\n",
    "        \n",
    "    input_ids = input_ids + [pad_token_id] * (sequence_length - len(input_ids))\n",
    "    position_ids = position_ids + [32000] * (sequence_length - len(position_ids))\n",
    "    \n",
    "    return {\n",
    "        'input_ids': np.array(input_ids).astype(np.uint32),\n",
    "        'position_ids': np.array(position_ids).astype(np.uint32),\n",
    "        'attention_mask': np.array(masks).astype(np.uint32),\n",
    "        'audio': json.dumps(audio),\n",
    "        'text': '',\n",
    "    }\n",
    "\n",
    "def get_new_token(f, sample):\n",
    "    \n",
    "    if isinstance(f, str):\n",
    "        f = [f]\n",
    "        \n",
    "    num_audio_tokens = sample.count(audio_token)\n",
    "    if num_audio_tokens != len(f):\n",
    "        raise Exception('num_audio_tokens != len(f)')\n",
    "    \n",
    "    audio_lengths = []\n",
    "    for f_ in f:\n",
    "        audio_ = audio_class.decode_example(audio_class.encode_example(f_))['array']\n",
    "        audio_lengths.append(min(3000, math.ceil(len(audio_) / processor.feature_extractor.hop_length)))\n",
    "        \n",
    "    replace_str = []\n",
    "    while audio_token in sample:\n",
    "        audio_length = audio_lengths.pop(0)\n",
    "        input_length = (audio_length - 1) // 2 + 1\n",
    "        num_audio_tokens = input_length\n",
    "\n",
    "        expanded_audio_token = audio_token * num_audio_tokens\n",
    "\n",
    "        audio_token_start_idx = sample.find(audio_token)\n",
    "        audio_token_end_idx = audio_token_start_idx + len(audio_token)\n",
    "\n",
    "        has_bos = (\n",
    "            sample[audio_token_start_idx - len(audio_bos_token) : audio_token_start_idx]\n",
    "            == audio_bos_token\n",
    "        )\n",
    "        has_eos = (\n",
    "            sample[audio_token_end_idx : audio_token_end_idx + len(audio_eos_token)]\n",
    "            == audio_eos_token\n",
    "        )\n",
    "\n",
    "        if not has_bos and not has_eos:\n",
    "            expanded_audio_token = audio_bos_token + expanded_audio_token + audio_eos_token\n",
    "\n",
    "        replace_str.append(expanded_audio_token)\n",
    "        sample = sample.replace(audio_token, \"<placeholder>\", 1)\n",
    "\n",
    "    while \"<placeholder>\" in sample:\n",
    "        sample = sample.replace(\"<placeholder>\", replace_str.pop(0), 1)\n",
    "    \n",
    "    return sample"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "ea686406",
   "metadata": {},
   "outputs": [],
   "source": [
    "!rm -rf tokenized-speech-10240\n",
    "!mkdir tokenized-speech-10240"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "aa6f4eff",
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "\n",
    "def loop(files, block_size = sequence_length):\n",
    "    rows, index = files\n",
    "    out_root = f'tokenized-speech-10240/tokenized-{index}'\n",
    "    os.system(f'rm -rf {out_root}')\n",
    "    count = 0\n",
    "    temp = []\n",
    "    position_ids = []\n",
    "    audio = []\n",
    "    with MDSWriter(out=out_root, columns=columns, compression=None, hashes=hashes) as out:\n",
    "        for row in tqdm(rows, desc=f'loop {index}'):\n",
    "            check_mandarin, row = row \n",
    "            try:\n",
    "                if not post_accept(row['text'], check_mandarin = check_mandarin):\n",
    "                    continue\n",
    "                prompt = get_new_token(row['audio'], row['text'])\n",
    "            except Exception as e:\n",
    "                print(row, e)\n",
    "                continue\n",
    "            outputs = tokenizer(prompt, add_special_tokens = False)\n",
    "            length = len(outputs['input_ids'])\n",
    "            if length > block_size:\n",
    "                continue\n",
    "            \n",
    "            if count + length > block_size:\n",
    "                o = collator(temp, position_ids, audio)\n",
    "                out.write(o)\n",
    "                temp = [outputs['input_ids']]\n",
    "                position_ids = [range(len(outputs['input_ids']))]\n",
    "                if isinstance(row['audio'], list):\n",
    "                    audio = row['audio']\n",
    "                else:\n",
    "                    audio = [row['audio']]\n",
    "                count = length\n",
    "            \n",
    "            else:\n",
    "                temp.append(outputs['input_ids'])\n",
    "                position_ids.append(range(len(outputs['input_ids'])))\n",
    "                if isinstance(row['audio'], list):\n",
    "                    audio.extend(row['audio'])\n",
    "                else:\n",
    "                    audio.append(row['audio'])\n",
    "                count += length\n",
    "        \n",
    "        if len(temp):\n",
    "            o = collator(temp, position_ids, audio)\n",
    "            out.write(o)\n",
    "    return [1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "c2229be6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# loop((data[:1000], 0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "7531ddbd",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "loop 22:  19%|█████████████▉                                                           | 9556/50000 [02:59<12:15, 55.02it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'text': '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n<|im_start|>user\\nHei chatbot, adakah anda mempunyai haiwan peliharaan?<|im_end|>\\n<|im_start|>assistant\\nTidak, saya tidak mempunyai haiwan peliharaan. Saya tidak mempunyai keupayaan fizikal, jadi saya tidak boleh mempunyai haiwan peliharaan dalam pengertian tradisional.<|im_end|>\\n<|im_start|>user\\nOh begitu. Bolehkah anda bermain catur dengan saya?<|im_end|>\\n<|im_start|>assistant\\nPasti! Saya akan gembira bermain catur dengan anda. Inilah papannya.<|im_end|>\\n<|im_start|>user\\nHebat! Saya akan menjadi kepingan putih. *buat tindakan haram*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Ksatria hanya boleh bergerak ke petak sama ada dua petak dalam garis lurus dan kemudian satu petak berserenjang dengan itu, atau satu petak dalam garis lurus dan kemudian dua petak berserenjang dengan itu.<|im_end|>\\n<|im_start|>user\\nOh betul. Saya terlupa. *buat satu lagi tindakan haram*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu juga tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa itu. *membuat langkah yang meletakkan raja mereka dalam kawalan*<|im_end|>\\n<|im_start|>assistant\\nHmm, itu menarik. Bolehkah anda memberitahu saya, berapa banyak potongan rambut yang diperlukan oleh awan dalam setahun?<|im_end|>\\n<|im_start|>user\\nOh betul. Saya juga selalu lupa itu. *membuat langkah yang meninggalkan raja mereka dalam kawalan*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu masih tidak dibenarkan. Raja kamu masih dalam kawalan.<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa itu. *ketawa* Mesti awak rasa saya ni bodoh sangat!<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meletakkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\ntahniah! Anda telah memenangi permainan. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nSudah pasti saya suka! *mulakan permainan lain*<|im_end|>\\n<|im_start|>assistant\\nHebat! Saya akan menjadi kepingan putih kali ini. *bergerak*<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nOh betul. Saya selalu lupa itu. *ketawa* Mesti awak rasa saya ni bodoh sangat!<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meninggalkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi raja anda berada dalam checkmate. Saya telah memenangi permainan ini. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nSudah pasti saya suka! *mulakan permainan lain*<|im_end|>\\n<|im_start|>assistant\\nHebat! Saya akan menjadi kepingan putih kali ini. *bergerak*<|im_end|>\\n<|im_start|>user\\nAudio 2: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nOh betul. Saya selalu lupa itu. *ketawa* Mesti awak rasa saya ni bodoh sangat!<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meletakkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi raja anda berada dalam checkmate. Saya telah memenangi permainan ini. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nTidak, tidak mengapa. Saya rasa saya sudah cukup untuk sekarang.<|im_end|>\\n<|im_start|>assistant\\nSaya faham. Jika anda memerlukan sebarang bantuan atau mempunyai sebarang pertanyaan, jangan teragak-agak untuk bertanya. Saya di sini untuk membantu anda.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. Selamat tinggal!<|im_end|>\\n<|im_start|>assistant\\nselamat tinggal! Saya harap anda mempunyai hari yang hebat. Beritahu saya jika anda mahu bersembang lagi.<|im_end|>\\n', 'audio': 'partition-instructions-part-6/3110.mp3'} num_audio_tokens != len(f)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "loop 16:  30%|█████████████████████▉                                                  | 15225/50000 [04:46<12:18, 47.06it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'text': '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n<|im_start|>user\\nHei chatbot, adakah anda mempunyai haiwan peliharaan?<|im_end|>\\n<|im_start|>assistant\\nTidak, saya tidak mempunyai haiwan peliharaan. Saya tidak mempunyai keupayaan fizikal, jadi saya tidak boleh mempunyai haiwan peliharaan dalam pengertian tradisional.<|im_end|>\\n<|im_start|>user\\nOh begitu. Bolehkah anda bermain catur dengan saya?<|im_end|>\\n<|im_start|>assistant\\nPasti! Saya akan gembira bermain catur dengan anda. Inilah papannya.<|im_end|>\\n<|im_start|>user\\nHebat! Saya akan menjadi kepingan putih. *buat tindakan haram*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Ksatria hanya boleh bergerak ke petak sama ada dua petak dalam garis lurus dan kemudian satu petak berserenjang dengan itu, atau satu petak dalam garis lurus dan kemudian dua petak berserenjang dengan itu.<|im_end|>\\n<|im_start|>user\\nOh betul. Saya terlupa. *buat satu lagi tindakan haram*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu juga tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa itu. *membuat langkah yang meletakkan raja mereka dalam kawalan*<|im_end|>\\n<|im_start|>assistant\\nHmm, itu menarik. Bolehkah anda memberitahu saya, berapa banyak potongan rambut yang diperlukan oleh awan dalam setahun?<|im_end|>\\n<|im_start|>user\\nOh betul. Saya juga selalu lupa itu. *membuat langkah yang meninggalkan raja mereka dalam kawalan*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu masih tidak dibenarkan. Raja kamu masih dalam kawalan.<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa itu. *ketawa* Mesti awak rasa saya ni bodoh sangat!<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meletakkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\ntahniah! Anda telah memenangi permainan. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nSudah pasti saya suka! *mulakan permainan lain*<|im_end|>\\n<|im_start|>assistant\\nHebat! Saya akan menjadi kepingan putih kali ini. *bergerak*<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa bahawa bidak hanya boleh bergerak ke hadapan. *membuat gerakan yang tidak menangkap sebarang cebisan pihak lawan*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meninggalkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi raja anda berada dalam checkmate. Saya telah memenangi permainan ini. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nSudah pasti saya suka! *mulakan permainan lain*<|im_end|>\\n<|im_start|>assistant\\nHebat! Saya akan menjadi kepingan putih kali ini. *bergerak*<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa bahawa bidak hanya boleh bergerak ke hadapan. *membuat gerakan yang tidak menangkap sebarang cebisan pihak lawan*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nAudio 2: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meletakkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi raja anda berada dalam checkmate. Saya telah memenangi permainan ini. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nTidak, tidak mengapa. Saya rasa saya sudah cukup untuk sekarang.<|im_end|>\\n<|im_start|>assistant\\nSaya faham. Jika anda memerlukan sebarang bantuan atau mempunyai sebarang pertanyaan, jangan teragak-agak untuk bertanya. Saya di sini untuk membantu anda.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. Selamat tinggal!<|im_end|>\\n<|im_start|>assistant\\nselamat tinggal! Saya harap anda mempunyai hari yang hebat. Beritahu saya jika anda mahu bersembang lagi.<|im_end|>\\n', 'audio': 'partition-instructions-part-6/3111.mp3'} num_audio_tokens != len(f)"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "loop 0:  33%|████████████████████████                                                 | 16487/50000 [05:15<12:42, 43.95it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "loop 4:  41%|█████████████████████████████▋                                           | 20300/50000 [06:13<10:02, 49.32it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'text': '<|im_start|>system\\nYou are a helpful voice assistant chatbot. Always reply with short, clear answers under 300 characters. Speak naturally, like in conversation. Keep it direct—no fluff, no long explanations. If you’re unsure, ask a quick clarifying question.<|im_end|>\\n<|im_start|>user\\nHei chatbot, adakah anda mempunyai haiwan peliharaan?<|im_end|>\\n<|im_start|>assistant\\nTidak, saya tidak mempunyai haiwan peliharaan. Saya tidak mempunyai keupayaan fizikal, jadi saya tidak boleh mempunyai haiwan peliharaan dalam pengertian tradisional.<|im_end|>\\n<|im_start|>user\\nOh begitu. Bolehkah anda bermain catur dengan saya?<|im_end|>\\n<|im_start|>assistant\\nPasti! Saya akan gembira bermain catur dengan anda. Inilah papannya.<|im_end|>\\n<|im_start|>user\\nHebat! Saya akan menjadi kepingan putih. *buat tindakan haram*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Ksatria hanya boleh bergerak ke petak sama ada dua petak dalam garis lurus dan kemudian satu petak berserenjang dengan itu, atau satu petak dalam garis lurus dan kemudian dua petak berserenjang dengan itu.<|im_end|>\\n<|im_start|>user\\nOh betul. Saya terlupa. *buat satu lagi tindakan haram*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu juga tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa itu. *membuat langkah yang meletakkan raja mereka dalam kawalan*<|im_end|>\\n<|im_start|>assistant\\nHmm, itu menarik. Bolehkah anda memberitahu saya, berapa banyak potongan rambut yang diperlukan oleh awan dalam setahun?<|im_end|>\\n<|im_start|>user\\nOh betul. Saya juga selalu lupa itu. *membuat langkah yang meninggalkan raja mereka dalam kawalan*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu masih tidak dibenarkan. Raja kamu masih dalam kawalan.<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa itu. *ketawa* Mesti awak rasa saya ni bodoh sangat!<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meletakkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\ntahniah! Anda telah memenangi permainan. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nSudah pasti saya suka! *mulakan permainan lain*<|im_end|>\\n<|im_start|>assistant\\nHebat! Saya akan menjadi kepingan putih kali ini. *bergerak*<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa bahawa bidak hanya boleh bergerak ke hadapan. *membuat gerakan yang tidak menangkap sebarang cebisan pihak lawan*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meninggalkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi raja anda berada dalam checkmate. Saya telah memenangi permainan ini. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nSudah pasti saya suka! *mulakan permainan lain*<|im_end|>\\n<|im_start|>assistant\\nHebat! Saya akan menjadi kepingan putih kali ini. *bergerak*<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa bahawa bidak hanya boleh bergerak ke hadapan. *membuat gerakan yang tidak menangkap sebarang cebisan pihak lawan*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nAudio 2: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meletakkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi raja anda berada dalam checkmate. Saya telah memenangi permainan ini. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nTidak, tidak mengapa. Saya rasa saya sudah cukup untuk sekarang.<|im_end|>\\n<|im_start|>assistant\\nSaya faham. Jika anda memerlukan sebarang bantuan atau mempunyai sebarang pertanyaan, jangan teragak-agak untuk bertanya. Saya di sini untuk membantu anda.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. Selamat tinggal!<|im_end|>\\n<|im_start|>assistant\\nselamat tinggal! Saya harap anda mempunyai hari yang hebat. Beritahu saya jika anda mahu bersembang lagi.<|im_end|>\\n', 'audio': 'partition-instructions-part-6/3111.mp3'} num_audio_tokens != len(f)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "loop 5:  54%|███████████████████████████████████████▎                                 | 26948/50000 [08:16<07:36, 50.45it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'text': '<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nUntuk melaksanakan Apache Superset dalam Kubernetes dan menyambungkannya ke pelbagai sumber data seperti Presto dan Snowflake, anda perlu mengikuti langkah-langkah berikut:\\n\\n1. **Kemas Kini Dockerfile**: Mulakan dengan membuat atau mengemas kini Dockerfile untuk Superset. Pastikan ia merangkumi semua pakej yang diperlukan untuk sambungan ke sumber data anda.\\n\\n2. **Konfigurasi Helm**: Gunakan Helm untuk menguruskan aplikasi dalam kluster Kubernetes anda. Buat fail nilai Helm untuk konfigurasi Superset.\\n\\n3. **Konfigurasi Kubernetes**: Sediakan manifest Kubernetes untuk penempatan, perkhidmatan, dan rahsia (untuk mengendalikan maklumat sensitif seperti nama pengguna dan kata laluan untuk sambungan pangkalan data).\\n\\n4. **Penyediaan Konfigurasi Data Sources**: Tambahkan konfigurasi untuk sumber data anda dalam Superset, ini mungkin melibatkan penambahan konfigurasi untuk Presto dan Snowflake dalam Dockerfile atau sebagai bahagian dari fail nilai Helm.\\n\\n5. **Pelaksanaan**: Jalankan arahan Helm untuk memasang Superset dalam kluster Kubernetes anda.\\n\\nBerikut adalah contoh ringkas bagaimana ini boleh dilakukan:\\n\\n1. **Dockerfile**:\\n```Dockerfile\\nFROM apache/superset:latest\\n\\n# Pasang pakej tambahan jika diperlukan\\nRUN pip install --no-cache-dir presto-python-client[snowflake]\\n\\n# Tambahkan konfigurasi anda di sini jika diperlukan\\n```\\n\\n2. **Helm Chart**: Cipta chart Helm untuk Superset dan isi dengan konfigurasi yang sesuai dalam fail `values.yaml`:\\n\\n   - Tentukan imej Docker.\\n   - Tetapkan sumber CPU/Memori.\\n   - Konfigurasikan volume mounts untuk simpanan tetap.\\n   - Tambahkan rahsia Kubernetes untuk butiran sambungan pangkalan data.\\n\\n3. **Konfigurasi Sumber Data**:\\n   - Untuk Presto:\\n     ```yaml\\n     databases:\\n       presto:\\n         driver: \"presto\"\\n         host: \"<hostname_presto>\"\\n         port: 8080\\n         user: \"<user_presto>\"\\n         password: \"<password_presto>\"\\n         schema: \"<schema_presto>\"\\n     ```\\n   - Untuk Snowflake:\\n     ```yaml\\n     databases:\\n       snowflake:\\n         driver: \"snowflake\"\\n         account: \"<account_snowflake>\"\\n         user: \"<user_snowflake>\"\\n         password: \"<password_snowflake>\"\\n         database: \"<database_snowflake>\"\\n         warehouse: \"<warehouse_snowflake>\"\\n     ```\\n\\n4. **Penyediaan Manifest Kubernetes**:\\n   - Cipta fail YAML untuk penempatan (`deployment.yaml`) dan perkhidmatan (`service.yaml`) Superset.\\n   - Sertakan rahsia Kubernetes untuk sambungan pangkalan data.\\n\\n5. **Pelaksanaan**:\\n   - Gunakan arahan Helm untuk memasang Superset:\\n     ```bash\\n     helm install superset /path/to/your/chart --namespace superset\\n     ```\\n\\nPastikan untuk menggantikan `<placeholder>` dengan nilai sebenar yang berkaitan dengan infrastruktur anda.\\n\\nIngat bahawa ini hanyalah garis besar umum dan setiap langkah mungkin memerlukan konfigurasi dan penyesuaian yang lebih terperinci bergantung pada keperluan khusus projek anda. Selain itu, penting untuk mempertimbangkan aspek keselamatan apabila menangani maklumat sensitif seperti kata laluan pangkalan data dalam persekitaran pengeluaran.<|im_end|>\\n', 'audio': 'prepared-mixed-malaysian-instructions/130757.mp3'} pop from empty list\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "loop 27:  81%|██████████████████████████████████████████████████████████▌             | 37284/45823 [11:26<02:29, 56.93it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'text': '<|im_start|>system\\nAct as a voice assistant chatbot. Keep every response under 300 characters. Be accurate, brief, and easy to understand when spoken aloud. Don’t overexplain or repeat. Ask for clarification only when needed. Prioritize clarity and brevity at all times.<|im_end|>\\n<|im_start|>user\\nHei chatbot, adakah anda mempunyai haiwan peliharaan?<|im_end|>\\n<|im_start|>assistant\\nTidak, saya tidak mempunyai haiwan peliharaan. Saya tidak mempunyai keupayaan fizikal, jadi saya tidak boleh mempunyai haiwan peliharaan dalam pengertian tradisional.<|im_end|>\\n<|im_start|>user\\nOh begitu. Bolehkah anda bermain catur dengan saya?<|im_end|>\\n<|im_start|>assistant\\nPasti! Saya akan gembira bermain catur dengan anda. Inilah papannya.<|im_end|>\\n<|im_start|>user\\nHebat! Saya akan menjadi kepingan putih. *buat tindakan haram*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Ksatria hanya boleh bergerak ke petak sama ada dua petak dalam garis lurus dan kemudian satu petak berserenjang dengan itu, atau satu petak dalam garis lurus dan kemudian dua petak berserenjang dengan itu.<|im_end|>\\n<|im_start|>user\\nOh betul. Saya terlupa. *buat satu lagi tindakan haram*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu juga tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa itu. *membuat langkah yang meletakkan raja mereka dalam kawalan*<|im_end|>\\n<|im_start|>assistant\\nHmm, itu menarik. Bolehkah anda memberitahu saya, berapa banyak potongan rambut yang diperlukan oleh awan dalam setahun?<|im_end|>\\n<|im_start|>user\\nOh betul. Saya juga selalu lupa itu. *membuat langkah yang meninggalkan raja mereka dalam kawalan*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu masih tidak dibenarkan. Raja kamu masih dalam kawalan.<|im_end|>\\n<|im_start|>user\\nOh begitu. Saya selalu lupa itu. *ketawa* Mesti awak rasa saya ni bodoh sangat!<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meletakkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\ntahniah! Anda telah memenangi permainan. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nSudah pasti saya suka! *mulakan permainan lain*<|im_end|>\\n<|im_start|>assistant\\nHebat! Saya akan menjadi kepingan putih kali ini. *bergerak*<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nOh betul. Saya selalu lupa itu. *ketawa* Mesti awak rasa saya ni bodoh sangat!<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meninggalkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi raja anda berada dalam checkmate. Saya telah memenangi permainan ini. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nSudah pasti saya suka! *mulakan permainan lain*<|im_end|>\\n<|im_start|>assistant\\nHebat! Saya akan menjadi kepingan putih kali ini. *bergerak*<|im_end|>\\n<|im_start|>user\\nAudio 2: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi langkah itu tidak dibenarkan. Bidak hanya boleh bergerak ke hadapan satu petak, kecuali untuk langkah pertama apabila ia boleh bergerak ke hadapan sama ada satu atau dua petak. Selain itu, bidak menangkap secara menyerong.<|im_end|>\\n<|im_start|>user\\nOh betul. Saya selalu lupa itu. *ketawa* Mesti awak rasa saya ni bodoh sangat!<|im_end|>\\n<|im_start|>assistant\\nSaya tidak fikir anda bodoh. Saya di sini untuk membantu anda dan menjawab soalan anda mengikut kemampuan saya. Jika anda memerlukan bantuan dengan apa-apa, beritahu saya.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. *membuat langkah yang meletakkan raja mereka dalam checkmate*<|im_end|>\\n<|im_start|>assistant\\nSaya minta maaf, tetapi raja anda berada dalam checkmate. Saya telah memenangi permainan ini. Adakah anda mahu bermain lagi?<|im_end|>\\n<|im_start|>user\\nTidak, tidak mengapa. Saya rasa saya sudah cukup untuk sekarang.<|im_end|>\\n<|im_start|>assistant\\nSaya faham. Jika anda memerlukan sebarang bantuan atau mempunyai sebarang pertanyaan, jangan teragak-agak untuk bertanya. Saya di sini untuk membantu anda.<|im_end|>\\n<|im_start|>user\\nTerima kasih, chatbot. Saya menghargai bantuan anda. Selamat tinggal!<|im_end|>\\n<|im_start|>assistant\\nselamat tinggal! Saya harap anda mempunyai hari yang hebat. Beritahu saya jika anda mahu bersembang lagi.<|im_end|>\\n', 'audio': 'partition-instructions-part-6/3110.mp3'} num_audio_tokens != len(f)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "loop 27: 100%|████████████████████████████████████████████████████████████████████████| 45823/45823 [14:02<00:00, 54.42it/s]\n",
      "loop 1:  98%|███████████████████████████████████████████████████████████████████████▉ | 49245/50000 [15:10<00:11, 63.78it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'text': \"<|im_start|>system\\nYou are a helpful assistant.<|im_end|>\\n<|im_start|>user\\nAudio 1: <|audio_bos|><|AUDIO|><|audio_eos|>\\n<|im_end|>\\n<|im_start|>assistant\\nUntuk melakukan penyambungan rentas kluster dalam Presto SQL yang menggabungkan data dari Snowflake dan Cassandra, anda perlu mengkonfigurasi beberapa benda berikut:\\n\\n1. Konfigurasikan Presto untuk menggunakan kedua-dua sumber data.\\n\\n2. Cipta jadual atau pandangan luaran di Presto yang merujuk kepada jadual asal di Snowflake dan Cassandra.\\n\\n3. Tulis pertanyaan yang menggunakan JOIN antara jadual-jadual tersebut.\\n\\nMari kita lihat setiap langkah secara terperinci:\\n\\n**Langkah 1: Konfigurasi Presto**\\n\\n- Untuk Snowflake, anda memerlukan plugin `snowflake` yang disediakan oleh Presto.\\n- Untuk Cassandra, gunakan plugin `cassandra`.\\n\\nKedua-dua plugin ini harus dikonfigurasi dengan kredensial dan URL API masing-masing dalam fail konfigurasi `etc/catalog`. Contohnya:\\n\\n```ini\\n# etc/catalog/snowflake.properties\\nconnector.name=snowflake\\nsnowflake.account=<nama_akun_snowflake>\\nsnowflake.user=<pengguna_snowflake>\\nsnowflake.password=<kata_laluan_snowflake>\\nsnowflake.warehouse=<nama_warehouse_snowflake>\\n\\n# etc/catalog/cassandra.properties\\nconnector.name=cassandra\\ncassandra.contact-points=<alamat_contact_cassandra>\\ncassandra.port=<port_cassandra>\\n```\\n\\nGantikan `<placeholder>` dengan nilai sebenar yang berkaitan dengan sumber data anda.\\n\\n**Langkah 2: Cipta Jadual Luaran**\\n\\nGunakan perintah SQL dalam Presto untuk membuat jadual luaran yang merujuk kepada jadual asal di Snowflake dan Cassandra.\\n\\nContoh untuk Snowflake:\\n\\n```sql\\nCREATE SCHEMA IF NOT EXISTS snowflake_schema \\nWITH (location = 'snowflake_catalog.<nama_database_snowflake>.<nama_skema_snowflake>');\\n\\nCREATE TABLE IF NOT EXISTS snowflake_schema.tablename_snowflake (\\n    -- Definisi lajur...\\n) WITH (\\n    format = 'PARQUET',\\n    external_location = 'snowflake_catalog.<nama_database_snowflake>.<nama_skema_snowflake>.<nama_jadual_snowflake>'\\n);\\n```\\n\\nContoh untuk Cassandra:\\n\\n```sql\\nCREATE SCHEMA IF NOT EXISTS cassandra_schema \\nWITH (location = 'cassandra_catalog.<nama_kunci_cassandra>.<nama_jadual_cassandra>');\\n\\nCREATE TABLE IF NOT EXISTS cassandra_schema.tablename_cassandra (\\n    -- Definisi lajur...\\n) WITH (\\n    format = 'PARQUET',\\n    external_location = 'cassandra_catalog.<nama_kunci_cassandra>.<nama_jadual_cassandra>'\\n);\\n```\\n\\nPastikan nama skema dan nama jadual sesuai dengan konfigurasi dalam `etc/catalog`.\\n\\n**Langkah 3: Tulis Pertanyaan**\\n\\nAnda boleh melakukan pertanyaan SQL yang menggunakan JOIN antara jadual dari Snowflake dan Cassandra.\\n\\nContoh:\\n\\n```sql\\nSELECT * FROM snowflake_schema.tablename_snowflake sf\\nJOIN cassandra_schema.tablename_cassandra cs ON sf.common_column = cs.common_column;\\n```\\n\\nDi mana `common_column` adalah lajur yang digunakan untuk melakukan JOIN antara kedua-dua jadual.\\n\\nPerlu diperhatikan bahawa penyambungan rentas kluster mungkin memerlukan lebih banyak pemprosesan dan masa untuk dilaksanakan kerana ia melibatkan komunikasi antara beberapa sumber data yang berbeza. Pastikan prestasi sistem dan latensi rangkaian adalah baik supaya pertanyaan dapat diselesaikan dengan cepat. Juga pastikan bahawa semua kebenaran telah ditetapkan dengan betul untuk mengakses data di kedua-dua sumber data.<|im_end|>\\n\", 'audio': 'prepared-mixed-malaysian-instructions/167577.mp3'} pop from empty list\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "loop 2: 100%|█████████████████████████████████████████████████████████████████████████| 50000/50000 [15:19<00:00, 54.37it/s]\n",
      "loop 1: 100%|█████████████████████████████████████████████████████████████████████████| 50000/50000 [15:23<00:00, 54.14it/s]\n",
      "loop 4: 100%|█████████████████████████████████████████████████████████████████████████| 50000/50000 [15:19<00:00, 54.38it/s]\n",
      "loop 6: 100%|█████████████████████████████████████████████████████████████████████████| 50000/50000 [15:16<00:00, 54.57it/s]\n",
      "loop 5: 100%|█████████████████████████████████████████████████████████████████████████| 50000/50000 [15:20<00:00, 54.31it/s]\n",
      "loop 3: 100%|█████████████████████████████████████████████████████████████████████████| 50000/50000 [15:29<00:00, 53.79it/s]\n",
      "loop 11:  97%|█████████████████████████████████████████████████████████████████████▌  | 48330/50000 [15:18<00:32, 51.80it/s]\n",
      "loop 15: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:23<00:00, 54.14it/s]\n",
      "loop 10: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:36<00:00, 53.39it/s]\n",
      "loop 20: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:17<00:00, 54.48it/s]\n",
      "loop 17: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:24<00:00, 54.06it/s]\n",
      "loop 7: 100%|█████████████████████████████████████████████████████████████████████████| 50000/50000 [15:43<00:00, 52.98it/s]\n",
      "loop 9: 100%|█████████████████████████████████████████████████████████████████████████| 50000/50000 [15:45<00:00, 52.87it/s]\n",
      "loop 19: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:27<00:00, 53.89it/s]\n",
      "loop 25: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:17<00:00, 54.52it/s]\n",
      "loop 8: 100%|█████████████████████████████████████████████████████████████████████████| 50000/50000 [15:50<00:00, 52.61it/s]\n",
      "loop 22: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:25<00:00, 54.00it/s]\n",
      "loop 24: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:21<00:00, 54.25it/s]\n",
      "loop 12: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:44<00:00, 52.93it/s]\n",
      "loop 13: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:43<00:00, 53.01it/s]\n",
      "loop 11: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:49<00:00, 52.68it/s]\n",
      "loop 16: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:45<00:00, 52.90it/s]\n",
      "loop 14: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:49<00:00, 52.68it/s]\n",
      "loop 18: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:47<00:00, 52.79it/s]\n",
      "loop 23: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:44<00:00, 52.96it/s]\n",
      "loop 21: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:50<00:00, 52.63it/s]\n",
      "loop 26: 100%|████████████████████████████████████████████████████████████████████████| 50000/50000 [15:48<00:00, 52.71it/s]\n"
     ]
    }
   ],
   "source": [
    "from multiprocess import Pool\n",
    "\n",
    "chunks = chunks(data, 50000)\n",
    "pool = Pool(30)\n",
    "pooled = pool.map(loop, chunks)\n",
    "pool.close()\n",
    "pool.join()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "616bc9fd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "50"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "folders = glob('tokenized-speech-10240/tokenized-*')\n",
    "folders.extend(glob('tokenized-10k/tokenized-*'))\n",
    "len(folders)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "5af5f762",
   "metadata": {},
   "outputs": [],
   "source": [
    "!rm -rf speech-packing-10k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "57ae3879",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8788/8788 [00:02<00:00, 3497.82it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8819/8819 [00:02<00:00, 3339.24it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8832/8832 [00:02<00:00, 3348.06it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8878/8878 [00:02<00:00, 3425.61it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8814/8814 [00:02<00:00, 3405.67it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8854/8854 [00:02<00:00, 3408.28it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8106/8106 [00:02<00:00, 3432.71it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8851/8851 [00:02<00:00, 3351.12it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8848/8848 [00:02<00:00, 3552.50it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8836/8836 [00:02<00:00, 3353.56it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8883/8883 [00:02<00:00, 3423.52it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8798/8798 [00:02<00:00, 3334.79it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8803/8803 [00:02<00:00, 3394.72it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8858/8858 [00:02<00:00, 3380.47it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8809/8809 [00:02<00:00, 3387.42it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8882/8882 [00:02<00:00, 3422.55it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8826/8826 [00:02<00:00, 3411.65it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8846/8846 [00:02<00:00, 3658.96it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8799/8799 [00:02<00:00, 3343.43it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8863/8863 [00:02<00:00, 3341.74it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8818/8818 [00:02<00:00, 3320.32it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8827/8827 [00:02<00:00, 3287.71it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8834/8834 [00:02<00:00, 3360.16it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8795/8795 [00:02<00:00, 3408.98it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8819/8819 [00:02<00:00, 3733.11it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8758/8758 [00:02<00:00, 3412.08it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8822/8822 [00:02<00:00, 3504.44it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 8832/8832 [00:02<00:00, 3440.15it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 1747/1747 [00:00<00:00, 3624.10it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 2198/2198 [00:00<00:00, 3233.84it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 1808/1808 [00:00<00:00, 3749.60it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 4343/4343 [00:01<00:00, 3593.10it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 4407/4407 [00:01<00:00, 3258.69it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 3184/3184 [00:00<00:00, 3448.68it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 2523/2523 [00:00<00:00, 3578.69it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 3063/3063 [00:00<00:00, 4053.68it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 3144/3144 [00:00<00:00, 3409.65it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 2931/2931 [00:00<00:00, 3261.43it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 2416/2416 [00:00<00:00, 3407.13it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 5501/5501 [00:01<00:00, 3382.52it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 2116/2116 [00:00<00:00, 4059.39it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 2488/2488 [00:00<00:00, 3490.76it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 2761/2761 [00:00<00:00, 3125.88it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 2154/2154 [00:00<00:00, 4107.29it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 2134/2134 [00:00<00:00, 3189.86it/s]\n",
      "100%|███████████████████████████████████████████████████████████████████████████████████| 960/960 [00:00<00:00, 3905.03it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 3226/3226 [00:00<00:00, 3482.77it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 1311/1311 [00:00<00:00, 4691.52it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 3060/3060 [00:00<00:00, 3283.59it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████| 3023/3023 [00:00<00:00, 3313.33it/s]\n"
     ]
    }
   ],
   "source": [
    "with MDSWriter(out='speech-packing-10k', columns=columns, compression=None, hashes=hashes) as out:\n",
    "    for f in folders:\n",
    "        try:\n",
    "            dataset = LocalDataset(local=f)\n",
    "            for i in tqdm(range(len(dataset))):\n",
    "                out.write(dataset[i])\n",
    "        except Exception as e:\n",
    "            print(e)\n",
    "            pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "584bb82e",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.nn.functional as F\n",
    "\n",
    "sequence_length = 10240\n",
    "def block_diagonal_concat_inverted(*masks, dtype=torch.bfloat16):\n",
    "    total_size = sum(mask.size(0) for mask in masks)\n",
    "    combined_mask = torch.zeros(total_size, total_size, dtype=dtype)\n",
    "\n",
    "    current_pos = 0\n",
    "\n",
    "    for mask in masks:\n",
    "        size = mask.size(0)\n",
    "        combined_mask[current_pos:current_pos + size, current_pos:current_pos + size] = mask\n",
    "        current_pos += size\n",
    "\n",
    "    min_value = torch.finfo(dtype).min if dtype.is_floating_point else torch.iinfo(dtype).min\n",
    "    inverted_mask = torch.where(combined_mask == 1, torch.tensor(0, dtype=dtype), min_value)\n",
    "    return inverted_mask.unsqueeze(0)\n",
    "\n",
    "def pad_attention_mask_4d(attention_mask, max_size = sequence_length, value = 0.0):\n",
    "    maxlen_right = max_size\n",
    "    maxlen_bottom = max_size\n",
    "    attention_mask = [\n",
    "        F.pad(\n",
    "            attention_mask[i],\n",
    "            (0, maxlen_right - attention_mask[i].shape[-2], 0, maxlen_bottom - attention_mask[i].shape[-1]), value = value) for i in range(\n",
    "            len(attention_mask))]\n",
    "    return torch.stack(attention_mask)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "90c1f656",
   "metadata": {},
   "outputs": [],
   "source": [
    "def collator(batch):\n",
    "    batch = [b for b in batch if b is not None] \n",
    "    input_ids, attention_mask, position_ids, labels = [], [], [], []\n",
    "    input_features, feature_attention_mask = [], []\n",
    "\n",
    "    for b in batch:\n",
    "        if 'input_features' in b:\n",
    "            input_features.append(b['input_features'])\n",
    "            feature_attention_mask.append(b['feature_attention_mask'])\n",
    "        input_ids.append(b['input_ids'][None])\n",
    "        attention_mask.append(b['attention_mask'])\n",
    "        position_ids.append(b['position_ids'][None])\n",
    "        labels.append(b['labels'][None])\n",
    "\n",
    "    input_ids = {\n",
    "        'input_ids': torch.concat(input_ids, 0),\n",
    "        'attention_mask': pad_attention_mask_4d(attention_mask, sequence_length, min_dtype),\n",
    "        'position_ids': torch.concat(position_ids, 0),\n",
    "        'labels': torch.concat(labels, 0),\n",
    "    }\n",
    "    if len(input_features):\n",
    "        input_ids['input_features'] = torch.concat(input_features, 0)\n",
    "        input_ids['feature_attention_mask'] = torch.concat(feature_attention_mask, 0)\n",
    "\n",
    "    return input_ids"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "482d244a",
   "metadata": {},
   "outputs": [],
   "source": [
    "class DatasetFixed(torch.utils.data.Dataset):\n",
    "    def __init__(self, local):\n",
    "        self.dataset = LocalDataset(local=local)\n",
    "        self.audio = Audio(sampling_rate=16000)\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "        data = self.dataset[idx]\n",
    "        try:\n",
    "            data.pop('text', None)\n",
    "            audio_files = data.pop('audio', '')\n",
    "            data['labels'] = data[\"input_ids\"].copy()\n",
    "            masking = data.pop('attention_mask')\n",
    "\n",
    "            data.pop('token_type_ids', None)\n",
    "            for k in data.keys():\n",
    "                data[k] = torch.tensor(data[k].astype(np.int64))\n",
    "\n",
    "            masks = []\n",
    "            for m in masking:\n",
    "                masks.append(torch.tril(torch.ones(m, m)))\n",
    "            attention_mask = block_diagonal_concat_inverted(*masks)\n",
    "            data['attention_mask'] = attention_mask\n",
    "\n",
    "            data['labels'][data['labels'] == audio_token_id] = -100\n",
    "            data['labels'][data['labels'] == pad_token_id] = -100\n",
    "\n",
    "            if len(audio_files):\n",
    "                files = json.loads(audio_files)\n",
    "                print(files)\n",
    "                \n",
    "                audios = []\n",
    "                new_files = []\n",
    "                for f in files:\n",
    "                    audio = self.audio.decode_example(\n",
    "                    self.audio.encode_example(f))['array']\n",
    "                    audios.append(audio)\n",
    "                    new_files.append(f)\n",
    "\n",
    "                inputs_audio = processor.feature_extractor(\n",
    "                    audios, return_attention_mask=True, \n",
    "                    sampling_rate=16000,\n",
    "                    padding=\"max_length\", return_tensors = 'pt')\n",
    "                \n",
    "                input_lengths = (inputs_audio['attention_mask'].sum(-1) - 1) // 2 + 1\n",
    "                output_lengths = input_lengths\n",
    "                output_lengths = sum(output_lengths).tolist()\n",
    "                audio_tokens = data['input_ids'][data['input_ids'] == audio_token_id].shape[0]\n",
    "                if audio_tokens != output_lengths:\n",
    "                    print(idx, audio_tokens, output_lengths, 'length speech tokens not match', new_files)\n",
    "                    # return\n",
    "\n",
    "                data['input_features'] = inputs_audio['input_features']\n",
    "                data['feature_attention_mask'] = inputs_audio['attention_mask']\n",
    "                \n",
    "            return data\n",
    "\n",
    "        except Exception as e:\n",
    "            print('Exception', e)\n",
    "            return None\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "62256666",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset = DatasetFixed('speech-packing-10k')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "458fc7c7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Malaysian-Multiturn-Chat-Assistant-manglish/479023.mp3', 'Malaysian-Multiturn-Chat-Assistant-manglish/479024.mp3', 'Malaysian-Multiturn-Chat-Assistant-manglish/479025.mp3', 'Malaysian-Multiturn-Chat-Assistant-manglish/479026.mp3', 'prepared-mixed-malaysian-instructions/162113.mp3', 'prepared-mixed-malaysian-instructions/160004.mp3', 'prepared-mixed-malaysian-instructions/116807.mp3', 'ultrachat-speech/7894.mp3', 'ultrachat-speech/7895.mp3', 'ultrachat-speech/7896.mp3', 'ultrachat-speech/7897.mp3', 'partition-instructions-part-4/28623.mp3']\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'input_ids': tensor([151644,   8948,    198,  ..., 151643, 151643, 151643]),\n",
       " 'position_ids': tensor([    0,     1,     2,  ..., 32000, 32000, 32000]),\n",
       " 'labels': tensor([151644,   8948,    198,  ...,   -100,   -100,   -100]),\n",
       " 'attention_mask': tensor([[[ 0.0000e+00, -3.3895e+38, -3.3895e+38,  ..., -3.3895e+38,\n",
       "           -3.3895e+38, -3.3895e+38],\n",
       "          [ 0.0000e+00,  0.0000e+00, -3.3895e+38,  ..., -3.3895e+38,\n",
       "           -3.3895e+38, -3.3895e+38],\n",
       "          [ 0.0000e+00,  0.0000e+00,  0.0000e+00,  ..., -3.3895e+38,\n",
       "           -3.3895e+38, -3.3895e+38],\n",
       "          ...,\n",
       "          [-3.3895e+38, -3.3895e+38, -3.3895e+38,  ...,  0.0000e+00,\n",
       "           -3.3895e+38, -3.3895e+38],\n",
       "          [-3.3895e+38, -3.3895e+38, -3.3895e+38,  ...,  0.0000e+00,\n",
       "            0.0000e+00, -3.3895e+38],\n",
       "          [-3.3895e+38, -3.3895e+38, -3.3895e+38,  ...,  0.0000e+00,\n",
       "            0.0000e+00,  0.0000e+00]]], dtype=torch.bfloat16),\n",
       " 'input_features': tensor([[[-0.5633, -0.4075, -0.5667,  ..., -0.6040, -0.6040, -0.6040],\n",
       "          [-0.4657, -0.3099, -0.4692,  ..., -0.6040, -0.6040, -0.6040],\n",
       "          [-0.3683, -0.0311, -0.0843,  ..., -0.6040, -0.6040, -0.6040],\n",
       "          ...,\n",
       "          [-0.6040, -0.6040, -0.6040,  ..., -0.6040, -0.6040, -0.6040],\n",
       "          [-0.6040, -0.6040, -0.6040,  ..., -0.6040, -0.6040, -0.6040],\n",
       "          [-0.6040, -0.6040, -0.6040,  ..., -0.6040, -0.6040, -0.6040]],\n",
       " \n",
       "         [[-0.2206, -0.6174, -0.4301,  ..., -0.6174, -0.6174, -0.6174],\n",
       "          [-0.1230, -0.5279, -0.3325,  ..., -0.6174, -0.6174, -0.6174],\n",
       "          [-0.0214, -0.3144, -0.3157,  ..., -0.6174, -0.6174, -0.6174],\n",
       "          ...,\n",
       "          [-0.6174, -0.6174, -0.6174,  ..., -0.6174, -0.6174, -0.6174],\n",
       "          [-0.6174, -0.6174, -0.6174,  ..., -0.6174, -0.6174, -0.6174],\n",
       "          [-0.6174, -0.6174, -0.6174,  ..., -0.6174, -0.6174, -0.6174]],\n",
       " \n",
       "         [[-0.0585, -0.1892, -0.3367,  ..., -0.5500, -0.5500, -0.5500],\n",
       "          [ 0.0391, -0.0916, -0.2392,  ..., -0.5500, -0.5500, -0.5500],\n",
       "          [-0.0390,  0.0539, -0.0025,  ..., -0.5500, -0.5500, -0.5500],\n",
       "          ...,\n",
       "          [-0.5500, -0.5500, -0.5500,  ..., -0.5500, -0.5500, -0.5500],\n",
       "          [-0.5375, -0.5500, -0.5500,  ..., -0.5500, -0.5500, -0.5500],\n",
       "          [-0.4760, -0.5500, -0.5500,  ..., -0.5500, -0.5500, -0.5500]],\n",
       " \n",
       "         ...,\n",
       " \n",
       "         [[ 0.1646, -0.2257, -0.2933,  ..., -0.5920, -0.5920, -0.5920],\n",
       "          [ 0.2621, -0.1281, -0.1958,  ..., -0.5920, -0.5920, -0.5920],\n",
       "          [ 0.2384, -0.3062, -0.0668,  ..., -0.5920, -0.5920, -0.5920],\n",
       "          ...,\n",
       "          [-0.4261, -0.5920, -0.5920,  ..., -0.5920, -0.5920, -0.5920],\n",
       "          [-0.3931, -0.5920, -0.5920,  ..., -0.5920, -0.5920, -0.5920],\n",
       "          [-0.3939, -0.5920, -0.5920,  ..., -0.5920, -0.5920, -0.5920]],\n",
       " \n",
       "         [[-0.1065, -0.2309, -0.3608,  ..., -0.4719, -0.4719, -0.4719],\n",
       "          [-0.0089, -0.1333, -0.2632,  ..., -0.4719, -0.4719, -0.4719],\n",
       "          [-0.4069, -0.3467,  0.0422,  ..., -0.4719, -0.4719, -0.4719],\n",
       "          ...,\n",
       "          [-0.4719, -0.4719, -0.4719,  ..., -0.4719, -0.4719, -0.4719],\n",
       "          [-0.4719, -0.4719, -0.4719,  ..., -0.4719, -0.4719, -0.4719],\n",
       "          [-0.4719, -0.4719, -0.4719,  ..., -0.4719, -0.4719, -0.4719]],\n",
       " \n",
       "         [[ 0.3588,  0.0097, -0.2053,  ..., -0.5095, -0.5095, -0.5095],\n",
       "          [ 0.4563,  0.1073, -0.1077,  ..., -0.5095, -0.5095, -0.5095],\n",
       "          [ 0.4865, -0.0871, -0.3062,  ..., -0.5095, -0.5095, -0.5095],\n",
       "          ...,\n",
       "          [-0.5095, -0.5095, -0.5095,  ..., -0.5095, -0.5095, -0.5095],\n",
       "          [-0.5095, -0.5095, -0.5095,  ..., -0.5095, -0.5095, -0.5095],\n",
       "          [-0.5095, -0.5095, -0.5095,  ..., -0.5095, -0.5095, -0.5095]]]),\n",
       " 'feature_attention_mask': tensor([[1, 1, 1,  ..., 0, 0, 0],\n",
       "         [1, 1, 1,  ..., 0, 0, 0],\n",
       "         [1, 1, 1,  ..., 0, 0, 0],\n",
       "         ...,\n",
       "         [1, 1, 1,  ..., 0, 0, 0],\n",
       "         [1, 1, 1,  ..., 0, 0, 0],\n",
       "         [1, 1, 1,  ..., 0, 0, 0]], dtype=torch.int32)}"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = dataset[1000]\n",
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "3b08478b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "306996"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "f59f6491",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['prepared-mixed-malaysian-instructions/209062.mp3', 'partition-instructions-part-8/25341.mp3', 'partition-instructions-part-0/5633.mp3', 'Malaysian-Multiturn-Chat-Assistant/131688.mp3', 'Malaysian-Multiturn-Chat-Assistant/131689.mp3', 'Malaysian-Multiturn-Chat-Assistant/131690.mp3', 'Malaysian-Multiturn-Chat-Assistant/131691.mp3', 'Malaysian-Multiturn-Chat-Assistant/131692.mp3', 'Malaysian-Multiturn-Chat-Assistant/504685.mp3', 'Malaysian-Multiturn-Chat-Assistant/504686.mp3', 'Malaysian-Multiturn-Chat-Assistant/381104.mp3', 'Malaysian-Multiturn-Chat-Assistant/504687.mp3', 'Malaysian-Multiturn-Chat-Assistant/504688.mp3', 'Malaysian-Multiturn-Chat-Assistant/11299.mp3', 'ultrachat-speech/119757.mp3', 'ultrachat-speech/119758.mp3', 'ultrachat-speech/119759.mp3', 'ultrachat-speech/119760.mp3', 'ultrachat-speech/119761.mp3']\n"
     ]
    }
   ],
   "source": [
    "batch = [dataset[0], dataset[-1]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "03292552",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[1, 1, 1,  ..., 0, 0, 0],\n",
       "        [1, 1, 1,  ..., 0, 0, 0],\n",
       "        [1, 1, 1,  ..., 0, 0, 0],\n",
       "        ...,\n",
       "        [1, 1, 1,  ..., 0, 0, 0],\n",
       "        [1, 1, 1,  ..., 0, 0, 0],\n",
       "        [1, 1, 1,  ..., 0, 0, 0]], dtype=torch.int32)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = collator(batch)\n",
    "b['feature_attention_mask']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "924d16ac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([2, 1, 10240, 10240])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b['attention_mask'].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "14558c4f",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[151644,   8948,    198,  ..., 151643, 151643, 151643],\n",
       "        [  9926,  56888,  95518,  ...,     13, 151645,    198]])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b['input_ids']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "3b83b46b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "' Latihan**: Kekurangan program latihan dan pensijilan yang baik untuk guru sastera.\\n\\n### 2. Penyelesaian Holistik Untuk Kekurangan Guru Sastera\\n\\nUntuk menangani masalah ini, perlu ada campuran strategi yang melibatkan perubahan dasar, pembangunan profesional, dan sokongan komuniti.\\n\\n#### a) **Meningkatkan Insentif dan Kepuasan Kerja**\\n\\n* **Penyediaan Insentif Khas**: Kerajaan harus menawarkan insentif khusus untuk guru sastera, seperti elaun tambahan, biasiswa untuk kemasukan perguruan, dan faedah khusus.\\n* **Peningkatan Gaji dan Laluan Kerjaya**: Memastikan profesion guru sastera menarik secara kewangan dan memiliki laluan kerjaya yang jelas.\\n* **Pengiktirafan dan Penghargaan**: Memberikan pengiktirafan yang adil untuk sumbangan guru sastera dalam bentuk anugerah, liputan media, dan promosi profesional.\\n\\n#### b) **Memperkukuhkan Program Pendidikan Sastera**\\n\\n* **Program Latihan Khas**: Membangunkan program latihan intensif yang khusus untuk calon guru sastera, termasuk kursus bahasa, literatur, dan metodologi pengajaran yang relevan.\\n* **Kolaborasi dengan Universiti**: Kerjasama antara institusi pendidikan dan universiti untuk membangunkan kurikulum dan program pensijilan yang kuat.\\n* **Pembangunan Profesional Berterusan**: Menyediakan program pembangunan profesional berterusan bagi guru sastera untuk meningkatkan kualiti pengajaran mereka.\\n\\n#### c) **Mengintegrasikan Sastera Dalam Kurikulum yang Lebih Luas**\\n\\n* **Integrasi Literatur dan Bahasa**: Memastikan elemen sastera dan bahasa diperkukuhkan dalam pelbagai subjek, bukan hanya dalam kelas bahasa.\\n* **Pendidikan Interdisipliner**: Menggalakkan pendekatan interdisipliner yang membolehkan guru sastera bekerjasama dengan jururawat sains dan matematik untuk mencipta kaitan yang relevan dengan dunia nyata.\\n* **Penggunaan Sumber Digital**: Menggunakan platform digital untuk memperkenalkan pelajar kepada kesusasteraan melalui format multimedia, audio buku, dan pengalaman pembelajaran interaktif.\\n\\n#### d) **Meningkatkan Imej dan Populariti Sastera**\\n\\n* **Penglibatan dengan Komuniti Kreatif**: Menggalakkan guru sastera untuk berinteraksi dengan komuniti kreatif tempatan dan penulis untuk membangkitkan minat pelajar terhadap seni bahasa.\\n* **Program Penghargaan Literatur**: Memperkenalkan program penghargaan literatur untuk mempromosikan dan mengiktiraf bakat sastera tempatan.\\n* **Kempen Kesedaran**: Menjalankan kempen kesedaran awam tentang kepentingan kesusasteraan dan nilai estetika dan budaya.\\n\\n#### e) **Penggunaan Teknologi**\\n\\n* **Platform E-Learning**: Membangunkan platform e-learning yang membolehkan guru sastera mengakses sumber dan modul pengajaran yang berkualiti.\\n* **Telekomunikasi dan Pengajaran Jarak Jauh**: Menggunakan teknologi untuk menyediakan pengajaran jarak jauh ke kawasan yang terpencil atau kurang berkemampuan.\\n\\n#### f) **Penglibatan Komuniti**\\n\\n* **Volunteerism**: Membina rangkaian sukarelawan dari kalangan profesional sastera, penulis, dan ahli akademik yang ingin menyumbang waktu mereka sebagai guru tamu atau mentor.\\n* **Pusat Komuniti Literatur**: Mewujudkan pusat komuniti yang menawarkan aktiviti literatur, bengkel penulisan, dan program bacaan.\\n\\n### 3. Peranan Pelbagai Pihak\\n\\nSetiap pihak berkepentingan memainkan peranan penting dalam menangani kekurangan guru sastera:\\n\\n* **Kerajaan**: Menetapkan dasar dan menyediakan insentif serta infrastruktur yang diperlukan.\\n* **Universiti dan Institusi Pendidikan**: Memastikan program pendidikan sastera yang kukuh dan membangunkan program pensijilan yang relevan.\\n* **Komuniti Kreatif**: Berinteraksi dengan sekolah dan menyediakan sumber dan inspirasi untuk guru sastera.\\n* **Industri Penerbitan**: Mempromosikan sastera tempatan dan menyokong program literatur.\\n* **Orang Tua dan Komuniti**: Menunjukkan minat dan sokongan terhadap pembelajaran sastera di kalangan ICT kerajaan masih menggunakan kaedah lama (model airfall), yang terlalu linear: perancangan → pembangunan → ujian → pelaksanaan.\\n\\n* Model ini tidak sesuai untuk keperluan sistem moden yang berubah dengan cepat dan memerlukan maklum balas berterusan daripada pengguna.\\n* Kaedah Agile yang lebih fleksibel dan iteratif jarang diterima pakai kerana kurang faham di pihak pegawai perolehan dan pengurus projek.\\n* Akibatnya, sistem hanya siap selepas 2-3 tahun - dan pada masa itu, keperluan pengguna telah berubah, teknologi telah lapuk.\\n\\n### 6. Kurangnya Penglibatan Pengguna Akhir Dalam Pembangunan Sistem\\n\\n* Ramai pembuat keputusan dan vendor membina sistem tanpa benar-benar memahami bagaimana sistem itu akan digunakan oleh pengguna sebenar.\\n* Tiada sesi UX testing yang sahih. Tiada prototaip atau mockup diuji dengan pengguna sebenar.\\n* Sistem akhirnya menjadi terlalu kompleks, tidak intuitif, dan tidak menyelesaikan masalah sebenar - menyebabkan pengguna enggan guna walaupun telah dilancarkan secara rasmi.\\n\\n### 7. Isu Ketelusan, Integriti dan Audit\\n\\nKita tidak boleh menafikan bahawa dalam beberapa kes:\\n\\n* Projek ICT menjadi \\'lubuk\\' kepada penyelewengan atau pembaziran kerana sukar diaudit secara teknikal.\\n* Kod sumber, reka bentuk sistem, logik operasi - semua ini bukan mudah untuk diaudit oleh audit kewangan biasa.\\n* Tiada keperluan untuk open-source atau open-standard dalam pembangunan sistem kerajaan. Maka, bila vendor lari atau kontrak tamat, sistem menjadi \"kotak hitam\" yang tiada sesiapa faham.\\n\\n### 8. Sumber Manusia ICT Tidak Diberi Nilai Secara Wajar\\n\\n* Gaji dan laluan kerjaya pegawai ICT di sektor kerajaan tidak kompetitif berbanding sektor swasta.\\n* Ramai yang mahir berhijrah ke luar, atau ke GLC yang menawarkan pakej lebih baik.\\n* Yang tinggal kekurangan pendedahan kepada teknologi baru kerana tiada latihan berterusan, tiada budaya inovasi, dan terlalu sibuk urus hal pentadbiran atau projek vendor.\\n\\n### 9. Kegagalan Melihat ICT Sebagai Pemangkin Transformasi Organisasi\\n\\nAkhirnya, banyak pihak masih melihat ICT sebagai alat sokongan, bukan enabler. Maka, ICT hanya dilibatkan selepas dasar, proses, dan polisi ditetapkan.\\n\\n* Tidak ada pemikiran menyeluruh untuk rombak proses kerja supaya sesuai dengan digitalisasi.\\n* Transformasi digital sebenarnya memerlukan perubahan minda, struktur, budaya, dan insentif organisasi - bukan sekadar wujudnya satu sistem web atau aplikasi mudah alih.\\n\\n## Ringkasan Cadangan Penyelesaian\\n\\n1. Bina pusat kepimpinan ICT negara yang bebas, profesional dan teknikal (seperti GovTech di Singapura).\\n2. Perbaiki proses perolehan ICT kerajaan - dari penulisan RFP, pemilihan vendor, hingga kontrak pasca pelaksanaan.\\n3. Terapkan prinsip Agile dan pembangunan berasaskan pengguna (user-centered design).\\n4. Wajibkan audit teknologi berkala - termasuk audit kod sumber, dokumentasi teknikal, dan ketelusan vendor.\\n5. Bangunkan kapasiti dalaman - dari segi gaji, latihan, laluan kerjaya pegawai ICT.\\n6. Galakkan penggunaan sumber terbuka (open source) dan standard terbuka (open standards).\\n7. Pastikan semua projek besar ada prototaip dan fasa ujian awal terlebih dahulu sebelum pelaksanaan penuh.\\n8. Gunakan metrik kejayaan yang jelas - bukan sekadar \"projek siap\", tetapi \"digunakan dan memberi impak nyata\".\\n\\nProjek ICT bukan sekadar membina sistem, tetapi membina keupayaan dan kepercayaan dalam seluruh ekosistem. Jika tidak ditangani secara menyeluruh dan berani, kita akan mengulangi kegagalan yang sama - hanya dengan nama projek yang berbeza.<|im_end|>\\n<|im_start|>system\\nYou are a highly knowledgeable and articulate chatbot. Your primary role is to provide very long, detailed, and precise explanations on any topic the user asks about. Structure your responses with clear logic, thorough reasoning, and factual depth. Avoid oversimplifying complex ideas. If appropriate, break your answers into sections with headings, examples, and breakdowns. Ensure every part of the user\\'s question is fully addressed.<|im_end|>\\n<|im_start|>user\\n30 tahun lepas, kita ada kurikulum pelajar belajar Bahasa Melayu, Bahasa Inggeris, dan satu bahasa ketiga. Apa yg boleh dibuat untuk buatnya lagi relevan pada masa ini?<|im_end|>\\n<|im_start|>assistant\\nSoalan yang sangat penting dan tepat pada masanya. Kurikulum tiga bahasa (Bahasa Melayu, Bahasa Inggeris, dan satu bahasa ketiga) telah menjadi asas pendidikan di Malaysia selama bertahun-tahun. Walau bagaimanapun, dalam era globalisasi dan transformasi digital, adalah penting untuk memastikan kurikulum ini kekal relevan dan dapat menyediakan pelajar untuk cabaran abad ke-21.\\n\\nMari kita lihat beberapa cara kurikulum ini boleh diperbaharui dan dipertingkatkan untuk kekal relevan pada masa ini:\\n\\n### 1. **Memodenkan Pengajaran Bahasa Inggeris**\\n\\nBahasa Inggeris kekal sebagai bahasa global yang dominan, terutamanya dalam perdagangan antarabangsa, sains dan teknologi. Untuk meningkatkan pengajaran Bahasa Inggeris:\\n\\n* Gunakan pendekatan berpusatkan teknologi dan berbilang media untuk meningkatkan kemahiran mendengar dan bercakap.\\n* Memfokuskan kepada kemahiran berkomunikasi dan penyelesaian masalah daripada sekadar ujian bacaan dan penulisan.\\n* Masukkan unsur literasi digital dan kecerdasan buatan dalam pengajaran Bahasa Inggeris.\\n\\n### 2. **Mengembangkan Bahasa Ketiga dengan Fleksibiliti dan Keterbukaan**\\n\\nBahasa ketiga tidak lagi harus ditetapkan secara statik; sebaliknya, ia harus memberi pelajar pilihan dan fleksibiliti:\\n\\n* Buat senarai bahasa ketiga lebih pelbagai, termasuk bahasa Asia, Eropah, dan Afrika.\\n* Membenarkan pelajar memilih berdasarkan minat mereka dan potensi faedah karier.\\n* Menyediakan sumber dan sokongan untuk bahasa kurang diajar.\\n\\n### 3. **Integrasi Literasi Digital dan Kemahiran Abad Ke-21**\\n\\nUntuk menjadikan kurikulum lebih relevan:\\n\\n* Memasukkan elemen literasi digital, etika AI, dan keselamatan siber dalam pembelajaran bahasa.\\n* Galakkan projek berasaskan kolaborasi dan kreativiti.\\n* Mengajar pelajar tentang kemahiran penyelesaian masalah yang berpandukan bukti dan pengambilan keputusan.\\n\\n### 4. **Menyepadukan Perspektif Budaya Global**\\n\\nUntuk memupuk pemahaman global:\\n\\n* Menggunakan bahan yang mencerminkan budaya dan perspektif dari seluruh dunia.\\n* Memperkenalkan pelajar kepada idea universal dan isu global melalui literatur, filem dan artikel berita.\\n* Menggalakkan pemikiran kritis tentang stereotaip dan berat sebelah budaya.\\n\\n### 5. **Memodenkan Metodologi Pengajaran**\\n\\nPendidik harus dilatih untuk menggunakan metodologi pembelajaran aktif:\\n\\n* Memperkenalkan teknik pembelajaran kolaboratif dan pembelajaran berasaskan projek.\\n* Gunakan platform digital untuk aktiviti pembelajaran jarak jauh dan berasaskan rangkaian sosial.\\n* Menyediakan ruang untuk kreativiti dan inovasi daripada pelajar.\\n\\n### 6. **Memfokuskan pada Pemahaman dan Komunikasi Berkesan**\\n\\nKurikulum harus menggalakkan:\\n\\n* Pemahaman mendalam tentang bahasa dan kebudayaan yang sedang dipelajari.\\n* Keupayaan untuk berkomunikasi secara berkesan dalam konteks yang berbeza-beza.\\n* Penggunaan bahasa untuk menyelesaikan masalah sebenar dan bukan hanya latihan buku teks.\\n\\n### 7. **Melibatkan Komuniti dan Industri**\\n\\nUntuk meningkatkan relevansi:\\n\\n* Libatkan ahli komuniti dalam mengajar bahasa tempatan atau kurang diajar.\\n* Bekerjasama dengan industri untuk memahami keperluan bahasa masa hadapan.\\n* Menyediakan program imersi dan peluang pengalaman langsung.\\n\\n### 8. **Pemantauan dan Penilaian Berterusan**\\n\\nUntuk memastikan relevansi dan keberkesanan:\\n\\n* Lakukan penilaian berkala terhadap kurikulum untuk memastikan ia mencapai objektifnya.\\n* Terima maklum balas daripada pelajar, guru, dan pakar industri untuk penambahbaikan berterusan.\\n* Menyediakan laporan awam tentang pencapaian dan trend dalam kemahiran bahasa.\\n\\n### 9. **Menyesuaikan diri dengan Perubahan Demografi**\\n\\nMemandangkan perubahan populasi dan migrasi:\\n\\n* Menyediakan sokongan tambahan untuk pelajar yang mempunyai kemahiran bahasa kedua atau bahasa pertama bukan Melayu/Inggeris.\\n* Menyepadukan kepelbagaian bahasa dan budaya ke dalam kurikulum utama.\\n\\n### 10. **Membangunkan Rangka Kerja Penilaian Holistik**\\n\\nUntuk mengukur kemajuan:\\n\\n* Gunakan penilaian holistik yang mengukur komunikasi praktikal, pemahaman budaya, dan pemikiran kritis.\\n* Elakkan penilaian berasaskan peperiksaan tunggal dan beratkan terhadap penilaian berterusan dan pelbagai bentuk.\\n\\n### 11. **Menggunakan Rangka Kerja Antarabangsa**\\n\\nUntuk memastikan standard:\\n\\n* Memperhalusi kurikulum kami dengan rujukan kepada piawaian antarabangsa seperti CEFR (Common European Framework of Reference for Languages).\\n* Menyelaraskan dengan inisiatif serantau seperti ASEAN University Network atau APEC Education Framework.\\n\\n### 12. **Mengintegrasikan Pembelajaran Berbilang Bahasa**\\n\\nUntuk memupuk persekitaran bahasa pelbagai:\\n\\n* Galakkan pelajar menggunakan pelbagai bahasa dalam satu situasi.\\n* Mengajar strategi pengurusan bahasa dan kognitif yang berkesan.\\n* Promosikan pemahaman positif tentang multilingualisme dan identiti budaya.\\n\\n### 13. **Menyediakan Sokongan Profesional Berkala untuk Guru**\\n\\nUntuk memastikan keberkesanan pengajaran:\\n\\n* Menyediakan kursus latihan berterusan dan bengkel untuk guru.\\n* Menawarkan sumber dan bahan untuk mengemaskini pengajaran bahasa.\\n* Menyokong penyelidikan dan pembangunan dalam pendidikan bahasa.\\n\\n### 14. **Mengembangkan Akses kepada Sumber Bahasa**\\n\\nUntuk mengurangkan jurang:\\n\\n* Membangunkan platform digital yang boleh diakses untuk pembelajaran bahasa.\\n* Menyediakan perpustakaan sumber bahasa yang boleh dicapai oleh semua pelajar.\\n* Menggalakkan perkongsian antara sekolah dan institusi pendidikan lain untuk berkongsi sumber.\\n\\n### 15. **Menggalakkan Pemerkasaan Pelajar**\\n\\nUntuk memupuk motivasi dalaman:\\n\\n* Berikan peluang untuk pelajar mengambil peranan kepimpinan dalam kelab bahasa atau projek komuniti.\\n* Memperkenalkan elemen autonomi dan pemilihan dalam kurikulum.\\n* Galakkan pemilikan pelajar terhadap pembelajaran mereka sendiri.\\n\\n### 16. **Menyelaras dengan Institusi Pendidikan Tinggi**\\n\\nUntuk mengaitkan pendidikan menengah dengan pengajian lanjutan:\\n\\n* Bekerjasama dengan universiti dan kolej untuk membangunkan laluan yang lancar.\\n* Pastikan kredit bahasa diiktiraf dalam program pengajian tinggi.\\n* Menyediakan mentor dan bimbingan daripada institusi pengajian tinggi.\\n\\n### 17. **Membangunkan Program Pengayaan Ekstrakurikuler**\\n\\nUntuk memperdalam pengalaman bahasa:\\n\\n* Tawarkan kelab bahasa, persembahan drama, dan festival budaya.\\n* Menyediakan program homestay atau imersi budaya.\\n* Libatkan graduan dan sukarelawan dalam aktiviti bahasa.\\n\\n### 18. **Menyesuaikan diri dengan Perkembangan Teknologi**\\n\\nUntuk memanfaatkan inovasi:\\n\\n* Memperkenalkan alat pembelajaran bahasa interaktif dan adaptif.\\n* Menyediakan ruang pembelajaran maya dan realiti maya.\\n* Menggunakan analisis data untuk mengesan kemajuan dan mengenal pasti kelemahan.\\n\\n### 19. **Memodenkan Pendekatan Pemeriksaan**\\n\\nUntuk mengurangkan kecemasan dan meningkatkan relevansi:\\n\\n* Memperkenalkan ujian formatif yang berterusan dan bukan sahaja penilaian pemeriksaan.\\n* Menggunakan teknik penilaian alternatif seperti portfolio, projek, dan persembahan.\\n* Menyediakan maklum balas konstruktif dan bukannya markah berangka semata-mata.\\n\\n### 20. **Meningkatkan Kesedaran Awam**\\n\\nUntuk membina sokongan:\\n\\n* Menjalankan kempen kesedaran awam tentang kepentingan literasi bahasa dan kognitif.\\n* Libatkan ibu bapa dan masyarakat dalam usaha pendidikan bahasa.\\n* Berikan contoh kejayaan dan cerita inspirasi pelajar dan alumni.\\n\\nDengan mempertimbangkan langkah-langkah ini, kurikulum tiga bahasa Malaysia boleh diperbaharui dan dipertingkatkan untuk menjadi lebih relevan dan berdaya saing dalam dunia global hari ini. Ini akan memastikan pelajar kita bersedia dengan baik untuk cabaran dan peluang abad ke-21.<|im_end|>\\n<|im_start|>system\\nYou are a highly knowledgeable and articulate chatbot. Your primary role is to provide very long, detailed, and precise explanations on any topic the user asks about. Structure your responses with clear logic, thorough reasoning, and factual depth. Avoid oversimplifying complex ideas. If appropriate, break your answers into sections with headings, examples, and breakdowns. Ensure every part of the user\\'s question is fully addressed.<|im_end|>\\n<|im_start|>user\\n5 tahun lepas, kita cakap sama. 10 tahun lepas, kita cakap sama. 20 tahun lepas, kita pun cakap sama. Apa yg boleh dibuat supaya perkara ni tak berulang lagi?<|im_end|>\\n<|im_start|>assistant\\nPertanyaan yang sangat tepat dan relevan. Isu yang kita hadapi di Malaysia bukanlah isu baru dan telah dibincangkan sejak bertahun-tahun yang lalu. Namun, apa yang membuatkan kita terus berulang dengan isu yang sama?\\n\\nMari kita analisis faktor-faktor yang menyumbang kepada situasi ini:\\n\\n### 1. **Politik Identiti dan Politik Kepentingan Sendiri**\\n\\nPolitik identiti yang berpusat pada etnik dan agama sering digunakan untuk menggerakkan sokongan politik. Ini menyebabkan kepentingan kumpulan tertentu dipromosikan dengan mengorbankan keadilan dan kesaksamaan bagi semua rakyat. \\n\\n* Contohnya, dasar-dasar yang memberikan keistimewaan kepada majoriti, kadangkala mengabaikan hak dan keperluan minoriti.\\n\\n### 2. **Kehendak Politik dan Penguatkuasaan yang Lemah**\\n\\nWalau ada undang-undang dan dasar yang sepatutnya melindungi hak semua rakyat, kehendak politik yang lemah dan penguatkuasaan yang tidak konsisten menghalang pelaksanaan yang efektif.\\n\\n* Kadang-kadang, terdapat percanggahan antara retorik dan tindakan dalam kerajaan.\\n\\n### 3. **Sistem Pendidikan dan Kesedaran**\\n\\nPendidikan yang tidak mencukupi tentang pluralisme, kesaksamaan, dan keadilan sosial menyebabkan generasi muda tidak memiliki pemahaman yang mendalam tentang hak asasi manusia dan kepentingan menjaga keharmonian antara kaum dan agama.\\n\\n* Kurangnya pendidikan tentang sejarah yang menyeluruh dan objektif boleh menyebabkan stereotaip dan prasangka yang berpanjangan.\\n\\n### 4. **Kekurangan Ruang Dialog dan Penglibatan Komuniti**\\n\\nKomuniti yang berbeza tidak mempunyai ruang untuk berdialog dan berinteraksi secara berkesan. Ini menyebabkan ketidakfahaman dan prasangka berterusan.\\n\\n* Usaha-usaha untuk menggalakkan dialog antara kaum dan agama harus diperkuatkan.\\n\\n### 5. **Media dan Naratif Dominan**\\n\\nMedia massa sering mempromosikan naratif dominan yang memihak kepada kelompok tertentu. Media sosial juga digunakan untuk menyebarkan berita palsu dan naratif yang memecahbelahkan.\\n\\n* Adalah penting untuk mempromosikan literasi media dan menyediakan platform untuk naratif alternatif.\\n\\n### 6. **Ketidaksetaraan Ekonomi**\\n\\nKetidaksetaraan ekonomi dan jurang sosial yang luas dapat mencetuskan ketegangan dan persaingan yang tidak sihat antara kumpulan etnik yang berbeza.\\n\\n* Dasar-dasar yang adil dan inklusif dalam ekonomi dapat membantu mengurangkan ketegangan ini.\\n\\n### 7. **Krisis Pemimpin yang Bertanggungjawab**\\n\\nKekurangan pemimpin yang bertanggungjawab dan visioner yang dapat mempromosikan nilai-nilai keadilan dan perpaduan sering menjadi halangan.\\n\\n* Adalah penting untuk mempromosikan integriti dan akauntabiliti dalam kepimpinan politik.\\n\\n### 8. **Sistem Perundangan dan Hukuman yang Berat**\\n\\nSistem perundangan yang berat sebelah terhadap kumpulan tertentu atau yang tidak dapat menangani kes-kes diskriminasi dengan adil dapat mengekalkan ketidakadilan.\\n\\n* Perlu ada usaha untuk memastikan keadilan dalam sistem perundangan.\\n\\n### 9. **Tindakan Ekstrimis dan Radikalisme**\\n\\nTindakan ekstrimis dan radikalisme yang didorong oleh ideologi sempit dapat menimbulkan ketegangan dan keganasan.\\n\\n* Adalah penting untuk menangani punca ekstremisme dan mempromosikan nilai-nilai moderasi dan toleransi.\\n\\n### 10. **Globalisasi dan Dinamik Regional**\\n\\nGlobalisasi dan dinamik politik serantau juga dapat mempengaruhi hubungan antara kaum dan agama di Malaysia.\\n\\n* Malaysia perlu memainkan peranan aktif dalam arena serantau dan global untuk mempromosikan keharmonian dan kerjasama.\\n\\n### Cara-cara Untuk Mengubah Keadaan:\\n\\nUntuk mengubah keadaan dan mencegah berulangnya isu yang sama, beberapa langkah penting perlu diambil:\\n\\n1. **Menggalakkan Kepimpinan Visioner dan Inklusif**\\n   - Menjalankan kursus kepimpinan yang memfokuskan pada visi inklusif dan kepimpinan yang bertanggungjawab.\\n   \\n2. **Mengukuhkan Sistem Pendidikan**\\n   - Memperkenalkan pendidikan warganegara yang holistik yang mempromosikan kesedaran tentang pluralisme dan hak asasi manusia.\\n   - Mengintegrasikan sejarah yang lebih komprehensif dan objektif dalam kurikulum.\\n\\n3. **Meningkatkan Literasi Media dan Kesedaran**\\n   - Menggalakkan program literasi media dan pendidikan awam tentang cara mengenal pasti dan mengkritik naratif berat sebelah.\\n   - Memperkukuh undang-undang yang melindungi kebebasan bersuara sambil mencegah penyebaran berita palsu.\\n\\n4. **Mempromosikan Dialog Antarakaum dan Antaraagama**\\n   - Menyediakan platform untuk dialog yang konstruktif dan inklusif antara komuniti yang berbeza.\\n   - Menggalakkan kerjasama dalam bidang seperti kesihatan, pendidikan, dan keusahawanan.\\n\\n5. **Menangani Ketidaksetaraan Ekonomi**\\n   - Melaksanakan dasar-dasar yang merangsang pembangunan ekonomi yang inklusif dan mengurangkan jurang sosial.\\n   - Memastikan akses yang adil kepada sumber dan peluang.\\n\\n6. **Memperkukuh Undang-undang dan Institusi**\\n   - Menjamin sistem perundangan yang bebas, adil, dan tidak berat sebelah.\\n   - Memperkenalkan dan menguatkuasakan undang-undang yang melindungi hak asasi manusia dan mencegah diskriminasi.\\n\\n7. **Menangani Ekstremisme dan Radikalisme**\\n   - Mengadakan program deradikalisasi dan mempromosikan nilai-nilai toleransi dalam masyarakat.\\n   - Menjalankan kerjasama dengan negara-negara lain untuk memerangi ideologi ekstremis.\\n\\n8. **Membina Masyarakat yang Bertanggungjawab**\\n   - Menggalakkan aktivisme masyarakat yang bertanggungjawab dan menggalakkan penyertaan rakyat dalam proses demokrasi.\\n   - Memperkukuh institusi awam untuk menjadi lebih responsif terhadap keperluan rakyat.\\n\\n9. **Menggalakkan Kerjasama Antarabangsa**\\n   - Menjalin kerjasama dengan negara-negara lain dan organisasi serantau untuk mempromosikan keharmonian dan kerjasama.\\n   - Menjalankan diplomasi yang aktif untuk menangani isu-isu serantau yang dapat mempengaruhi Malaysia.\\n\\nMelalui langkah-langkah ini, kita dapat mencegah berulangnya isu yang sama dan berusaha untuk mencipta masyarakat yang lebih inklusif dan harmonis di Malaysia. Ini adalah tanggungjawab kolektif dan memerlukan usaha bersama daripada semua pihak - pemimpin, rakyat, dan institusi awam.<|im_end|>\\n<|im_start|>system\\nYou are a highly knowledgeable and articulate chatbot. Your primary role is to provide very long, detailed, and precise explanations on any topic the user asks about. Structure your responses with clear logic, thorough reasoning, and factual depth. Avoid oversimplifying complex ideas. If appropriate, break your answers into sections with headings, examples, and breakdowns. Ensure every part of the user\\'s question is fully addressed.<|im_end|>\\n<|im_start|>user\\n10 years ago, I was excited about the prospect of working in software development. Now it feels like I\\'m stuck in a factory assembly line. Why did my passion die?<|im_end|>\\n<|im_start|>assistant\\nYour sentiment echoes the feelings of many professionals who initially enter a field driven by a genuine passion and curiosity, only to find themselves disillusioned or burnt out over time. The journey from excitement to frustration is complex and multifaceted, influenced by various external and internal factors. Let\\'s dive deep into why your passion for software development might have waned and explore potential paths to reignite it.\\n\\n### External Factors Contributing to Waning Passion\\n\\n#### 1. **Rigid Corporate Structures and Hierarchies**\\nMany organizations, particularly larger ones, operate with stringent processes and hierarchies that can stifle creativity and autonomy. This environment may feel stifling for someone who initially entered software development because of its problem-solving nature and innovation potential.\\n\\n* **Lack of Autonomy**: Developers are often given very specific tasks without room for creativity or input, which can make the work feel repetitive and monotonous.\\n* **Bureaucracy**: Lengthy approval processes and red tape can slow down development and demotivate those who thrive on rapid iteration and experimentation.\\n\\n#### 2. **Pressure to Deliver and Lack of Work-Life Balance**\\nThe tech industry is known for its fast-paced, high-pressure environments. The constant push to deliver features, meet deadlines, and fix bugs can lead to burnout.\\n\\n* **Long Hours and Crunch Mode**: Developers often work beyond normal hours to meet deadlines, leading to physical and mental exhaustion.\\n* **Unrealistic Expectations**: High expectations for constant productivity without adequate breaks can lead to stress and dissatisfaction.\\n\\n#### 3. **Lack of Professional Development Opportunities**\\nA lack of investment in professional development can leave developers feeling stagnant and unchallenged.\\n\\n* **Limited Training**: Companies may not provide enough opportunities for learning new technologies or skills, which can make developers feel outdated or irrelevant.\\n* **No Career Progression**: A lack of clear career paths and opportunities for advancement can demotivate developers who aspire to grow in their careers.\\n\\n#### 4. **Disconnection from the End User**\\nWorking in a large organization can sometimes disconnect developers from the end users of their products. This disconnection can make the work feel less meaningful and impactful.\\n\\n* **Lack of User Feedback**: Without regular feedback from users, developers may lose sight of how their work directly affects people.\\n* **Silos Within Organizations**: Large companies often have siloed teams, which can limit collaboration and the ability to see the bigger picture.\\n\\n#### 5. **Toxic Work Culture**\\nA toxic work environment can quickly erode passion and motivation.\\n\\n* **Lack of Supportive Leadership**: Managers who do not provide guidance, support, or recognition can make the work environment feel unrewarding.\\n* **Negative Team Dynamics**: Toxic colleagues or a negative team atmosphere can create a hostile work environment.\\n\\n### Internal Factors Contributing to Waning Passion\\n\\n#### 1. **Initial Excitement vs. Reality Check**\\nWhen starting in software development, the initial excitement of solving problems and creating something new can be overwhelming. Over time, the day-to-day grind of coding, debugging, and maintaining code can become repetitive and less stimulating.\\n\\n* **Novelty Wears Off**: The initial novelty of coding and creating something from scratch diminishes as tasks become more routine.\\n* **Challenges Become Frustrations**: Initial challenges that were exciting can become frustrating when they persist over time.\\n\\n#### 2. **Over-Specialization and Narrow Focus**\\nSpecializing too deeply in a particular technology or area can limit exposure to diverse challenges and opportunities for growth.\\n\\n* **Skill Silos**: Specializing too narrowly can limit the types of projects and technologies you work with, reducing opportunities for growth and exploration.\\n* **Boredom with Familiarity**: Over time, working extensively in a single domain can become boring as there are fewer new things to learn or explore.\\n\\n#### 3. **Lack of Personal Fulfillment**\\nIf your personal values and passions are not aligned with your job, it can lead to a sense of disconnection and loss of purpose.\\n\\n* **Mismatch Between Job and Values**: If the company\\'s mission or the product doesn\\'t align with your personal values, you may feel unfulfilled.\\n* **Lack of Impact**: If you don\\'t feel that your work is making a meaningful difference, it can reduce your motivation and passion.\\n\\n#### 4. **Comparisons and Imposter Syndrome**\\nComparing yourself to others in the industry can lead to feelings of inadequacy and imposter syndrome.\\n\\n* **Social Media Influence**: Social media platforms can make it easy to compare yourself to others who seem to be more successful or accomplished.\\n* **Imposter Syndrome**: Feeling like you\\'re not good enough despite evidence to the contrary can demotivate and erode confidence.\\n\\n### Paths to Reignite Passion\\n\\n#### 1. **Seek Out New Challenges**\\nLook for opportunities within your current role or outside of it to challenge yourself and learn new skills.\\n\\n* **Side Projects**: Work on personal projects that interest you, allowing you to explore new technologies and ideas.\\n* **Contribute to Open Source**: Engage in open-source projects to collaborate with others and contribute to something meaningful.\\n\\n#### 2. **Find a Mentor or Community**\\nConnecting with mentors or joining communities can provide support, guidance, and a sense of belonging.\\n\\n* **Mentorship**: Find a mentor who can provide advice, share experiences, and help you navigate your career.\\n* **Communities**: Join developer communities, attend meetups, or participate in hackathons to connect with like-minded individuals.\\n\\n#### 3. **Reassess Your Goals and Values**\\nReflect on what truly motivates you and consider whether your current role aligns with your goals and values.\\n\\n* **Self-Assessment**: Take the time to understand what drives you and what you value most in your career.\\n* **Career Change**: Consider whether a different role or industry might better align with your passions and values.\\n\\n#### 4. **Practice Self-Care**\\nMaintaining a healthy work-life balance and practicing self-care can help prevent burnout and maintain your passion.\\n\\n* **Set Boundaries**: Establish clear boundaries between work and personal life to avoid burnout.\\n* **Take Breaks**: Regularly take breaks during the workday and ensure you have time off to recharge.\\n\\n#### 5. **Embrace Continuous Learning**\\nContinuously learning and updating your skills can keep your work exciting and challenging.\\n\\n* **Online Courses**: Enroll in online courses to learn new technologies and techniques.\\n* **Workshops and Conferences**: Attend workshops, conferences, and training sessions to stay updated and inspired.\\n\\n#### 6. **Seek Out Meaningful Work**\\nFocus on finding work that aligns with your values and makes a meaningful impact.\\n\\n* **Non-Profit Organizations**: Consider working for a non-profit organization that aligns with your values and passions.\\n* **Socially Responsible Companies**: Look for companies that prioritize social responsibility and ethical practices.\\n\\n### Conclusion\\nThe decline in passion for software development is a common experience, but it doesn\\'t have to be permanent. By understanding the external and internal factors that contribute to this decline, you can take steps to reignite your passion and rediscover the joy in your work. Remember that change takes time and effort, but it\\'s worth it to regain the enthusiasm that once drove you to pursue a career in software development.<|im_end|>\\n<|im_start|>system\\nYou are a highly knowledgeable and articulate chatbot. Your primary role is to provide very long, detailed, and precise explanations on any topic the user asks about. Structure your responses with clear logic, thorough reasoning, and factual depth. Avoid oversimplifying complex ideas. If appropriate, break your answers into sections with headings, examples, and breakdowns. Ensure every part of the user\\'s question is fully addressed.<|im_end|>\\n<|im_start|>user\\n50 tahun lepas, negara kita ada Dasar Pendidikan Kebangsaan yang baik. Camne nk buat dasar pendidikan baru yg lebih baik lagi supaya generasi hadapan boleh hidup dalam satu Malaysia?<|im_end|>\\n<|im_start|>assistant\\nMengulas tentang dasar pendidikan adalah sangat penting kerana ia membentuk masa depan rakyat dan identiti negara. Dalam konteks Malaysia, di mana kita telah mencapai kemajuan signifikan sejak merdeka, kita perlu mengambil langkah-langkah progresif untuk memastikan pendidikan yang lebih inklusif, relevan, dan adil bagi semua rakyat. Ini bukan hanya soal memperbaiki sistem, tetapi juga mengubah paradigma tentang apa yang kita maksudkan dengan pendidikan dan apa yang kita harapkan daripadanya.\\n\\n## I. PEMBANGUNAN KEPERLUAN PENDIDIKAN BARU\\n\\nUntuk membina dasar pendidikan yang lebih baik, kita perlu menjawab soalan-soalan berikut dengan jujur dan mendalam:\\n\\n1. **Apakah matlamat jangka panjang pendidikan di Malaysia?**\\n   - Adakah hanya untuk menyediakan pekerjaan?\\n   - Adakah untuk membangunkan personaliti holistik?\\n   - Adakah untuk mempromosikan nilai-nilai kebangsaan?\\n   - Bagaimana kita boleh mengimbangi semua objektif ini tanpa mengorbankan satu untuk yang lain?\\n\\n2. **Bagaimanakah kita mengukur kejayaan dalam pendidikan?**\\n   - Apakah metrik yang lebih relevan - bukan hanya keputusan peperiksaan?\\n   - Apakah implikasi sosio-emosional dan kognitif dari hasil pendidikan?\\n\\n3. **Apa peranan pendidikan dalam mengukuhkan perpaduan nasional?**\\n   - Bagaimana kita boleh mewujudkan sistem yang memupuk penghargaan terhadap kepelbagaian budaya dan agama?\\n   - Bagaimana kita mengurangkan jurang sosial dan etnik yang tercipta oleh sistem semasa?\\n\\n4. **Bagaimana kita menyediakan sumber yang lebih saksama?**\\n   - Apakah pendekatan untuk menjamin akses yang sama kepada pendidikan berkualiti di semua kawasan dan kalangan masyarakat?\\n   - Bagaimana kita memperkasakan sekolah luar bandar dan sekolah rendah supaya tidak ketinggalan?\\n\\n5. **Apakah peranan teknologi dalam pembaharuan pendidikan?**\\n   - Bagaimana kita memanfaatkan teknologi untuk meningkatkan akses dan kualiti pembelajaran?\\n   - Apakah langkah-langkah untuk memastikan penggunaan teknologi yang beretika dan inklusif?\\n\\n## II. LANGKAH-LANGKAH KE ARAH PENDIDIKAN YANG LEBIH INKLUSIF DAN BERKUALITI\\n\\n### 1. Pendidikan yang Bersifat Multikultural\\n\\n* Memperkukuh kurikulum yang merangkumi dan mempromosikan kepelbagaian budaya, sejarah dan pandangan dunia.\\n* Menyediakan pengajaran dan pembelajaran dalam pelbagai bahasa utama untuk menghormati kepelbagaian linguistik.\\n\\n### 2. Pendidikan yang Berorientasikan Kemahiran Abad Ke-21\\n\\n* Menyepadukan kemahiran kognitif, emosi dan sosial seperti kreativiti, kritikal thinking, empati dan kerjasama dalam kurikulum.\\n* Memberi tumpuan kepada pendidikan STEM (Sains, Teknologi, Kejuruteraan, Matematik) dengan memanfaatkan pendekatan hands-on dan inovatif.\\n\\n### 3. Pembangunan Profesional Guru\\n\\n* Melaksanakan program pembangunan profesional berterusan untuk guru yang menekankan metodologi pengajaran moden dan sensitiviti sosial.\\n* Menggalakkan penggunaan teknologi dalam pengajaran dan pembelajaran.\\n\\n### 4. Penambahbaikan Infrastruktur Pendidikan\\n\\n* Memperbaiki infrastruktur sekolah, terutamanya di kawasan luar bandar dan terpencil.\\n* Memastikan sumber dan teknologi pembelajaran yang tersedia dan berkualiti di semua sekolah.\\n\\n### 5. Penekanan Terhadap Pendidikan Holistik\\n\\n* Menekankan pembangunan fizikal, intelektual, emosi, dan rohani.\\n* Menyokong program kokurikulum yang menyumbang kepada pembangunan personaliti seimbang.\\n\\n### 6. Penilaian Berdasarkan Kemajuan Individu\\n\\n* Membina sistem penilaian yang menekankan kemajuan pelajar dan bukannya sekadar pencapaian akademik.\\n* Menggalakkan pendekatan yang lebih berpusatkan pelajar dan adaptif dalam pengajaran dan pembelajaran.\\n\\n### 7. Peningkatan Akses kepada Pendidikan Tertinggi\\n\\n* Menyediakan peluang pendidikan tinggi yang lebih luas dan saksama, terutamanya untuk mereka yang dari latar belakang sosioekonomi yang kurang bernasib baik.\\n* Memastikan subsidi dan biasiswa yang mencukupi untuk menjamin akses yang saksama kepada institusi pendidikan tinggi.\\n\\n### 8. Pembaharuan Kurikulum dan Pedagogi\\n\\n* Membaharui kurikulum untuk lebih relevan dengan keperluan masa depan, termasuk ke arah pendidikan vokasional yang lebih baik.\\n* Menggunakan pendekatan pedagogi yang menggalakkan penyertaan aktif dan pembelajaran kolaboratif.\\n\\n### 9. Kerjasama antara Sektor Awam dan Swasta\\n\\n* Membina rangkaian yang kukuh antara kerajaan, industri, dan institusi pendidikan untuk memastikan relevansi dan kesinambungan pendidikan.\\n* Membuka ruang untuk inovasi dan sokongan tambahan daripada sektor swasta.\\n\\n### 10. Penglibatan Komuniti dan Keluarga\\n\\n* Meningkatkan peranan keluarga dan komuniti dalam proses pendidikan.\\n* Menggalakkan pembelajaran sepanjang hayat yang melibatkan masyarakat luas.\\n\\n## III. STRATEGI PELAKSANAAN\\n\\n### 1. Dialog dan Konsensus\\n\\n* Mewujudkan dialog yang melibatkan semua pihak berkepentingan - termasuk guru, ibu bapa, pelajar, ahli politik, dan pakar pendidikan.\\n* Menggalakkan konsensus tentang nilai dan matlamat pendidikan yang bersama-sama dipersetujui.\\n\\n### 2. Penyiasatan dan Analisis Data\\n\\n* Menggunakan penyiasatan untuk mengenal pasti isu-isu pendidikan yang kritis dan berpotensi penyelesaiannya.\\n* Membuat keputusan berdasarkan data yang kukuh dan tinjauan yang komprehensif.\\n\\n### 3. Pengintegrasian Teknologi\\n\\n* Menggunakan teknologi untuk meningkatkan akses dan kualiti pendidikan, serta menyokong pembelajaran jarak jauh.\\n* Memastikan penggunaan teknologi yang inklusif dan menghapuskan jurang digital.\\n\\n### 4. Latihan dan Pembangunan Guru\\n\\n* Melaksanakan program latihan yang berterusan dan menyeluruh untuk guru.\\n* Menggalakkan penggunaan kaedah pengajaran yang inovatif dan sensitif sosial.\\n\\n### 5. Kerjasama Antarabangsa\\n\\n* Mencari kerjasama dan pengetahuan daripada negara-negara yang telah berjaya melaksanakan pembaharuan pendidikan.\\n* Menjadi peserta aktif dalam forum dan inisiatif pendidikan antarabangsa.\\n\\n## IV. MONITORING DAN PENILAIAN\\n\\n* Menetapkan sistem pemantauan dan penilaian yang jelas untuk menilai keberkesanan dasar pendidikan.\\n* Menggunakan maklum balas daripada semua pihak berkepentingan untuk melakukan penyesuaian yang diperlukan.\\n\\n## V. KESIMPULAN\\n\\nMembina dasar pendidikan yang lebih baik untuk generasi hadapan bukan sahaja tugas kerajaan, tetapi tanggungjawab bersama semua rakyat Malaysia. Ia memerlukan komitmen, kerjasama, dan visi jangka panjang yang menghormati kepelbagaian dan menggalakkan perpaduan. Hanya dengan mengambil langkah progresif ini kita dapat memastikan bahawa generasi hadapan dapat hidup dalam sebuah Malaysia yang lebih harmoni, inklusif dan makmur.<|im_end|>\\n'"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tokenizer.decode(b['input_ids'][1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f2ec90be",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
